| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 413 人关注过本帖
标题:关于阶乘 ,运行代码后部分数据不对,实在找不出哪里有问题
只看楼主 加入收藏
上海之恋
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-2-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
关于阶乘 ,运行代码后部分数据不对,实在找不出哪里有问题
题目描述:

    输入n,
    求y1=1!+3!+...m!(m是小于等于n的最大奇数)
    y2=2!+4!+...p!(p是小于等于n的最大偶数)。

输入:

    每组输入包括1个整数:n(不超过100)

输出:

    可能有多组测试数据,对于每组数据,
    输出题目要求的y1和y2

样例输入:

    4

样例输出:

    7 26

我的代码是,请问,哪里出问题了啊、、、跪求
#include<stdio.h>
struct bigInteger{
     int digit[1000];
     int size;

     void init(){
         int i;
         for(i=0;i<1000;i++)
           digit[i]=0;
            size=0;
         }


    void set(int x){
       init();
       if(x==0){
          digit[0]=0;
          size++;
       }
       while(x){
       digit[size++]=x%10000;
         x=x/10000;
       }
     }

    void print(){
        int i;
       for(i=size-1;i>=0;i--)
       {
            if(i==size-1)
                printf("%d",digit[i]);
            else
                printf("%04d",digit[i]);
      
       }
       //printf("\n");
   
    }


    bigInteger operator * (int x)const{
            bigInteger ret;
            ret.init();
            int carry=0,i,sum;
            for(i=0;i<size;i++){
                   sum=digit[i]*x+carry;
                    ret.digit[ret.size++]=sum%10000;
                    carry=sum/10000;
            }
            if(carry){
            ret.digit[ret.size++]=carry;
            }
            return ret;
        }
bigInteger operator + (const struct bigInteger &A)const{
                 bigInteger ret;
                 ret.init();
                 int carry=0,i,sum;
                 for(i=0;i<size;i++){
                        sum=digit[i]+A.digit[i]+carry;
                        ret.digit[ret.size++]=sum%10000;
                        carry=sum/10000;
                 }
           if(carry){
            ret.digit[ret.size++]=carry;
            }
           return ret;
        }


};


int main(){
       int n,i,m,p,j;
    while(scanf("%d",&n)!=EOF){
        if(n%2==1){
          m=n;
          p=n-1;
        }
        else{
         p=n;
         m=n-1;
        }
           struct bigInteger y1,y2,y3,y4;
        
           y1.set(0);
           y2.set(0);
           y3.set(1);
           y4.set(1);
           for(i=1;i<=m;i=i+2){
              for(j=1;j<=i;j++)
              {y3=y3*j;}
                  y1=y1+y3;
                  y3.set(1);
           }

           for(i=2;i<=p;i=i+2){
                 for(j=1;j<=i;j++)
                 {y4=y4*j;}
                    y2=y2+y4;
                    y4.set(1);
           
           }
        
     y1.print();
     printf(" ");
     y2.print();
     printf("\n");

   
    }
return 0;
}


顺便附下正确地测试结果:


1 0
1 2
7 2
7 26
127 26
127 746
5167 746
5167 41066
368047 41066
368047 3669866
40284847 3669866
40284847 482671466
6267305647 482671466
6267305647 87660962666
1313941673647 87660962666
1313941673647 21010450850666
357001369769647 21010450850666
357001369769647 6423384156578666
122002101778601647 6423384156578666
122002101778601647 2439325392333218666
这是前0~20的结果


[ 本帖最后由 上海之恋 于 2014-1-30 11:20 编辑 ]
搜索更多相关主题的帖子: include 
2014-01-30 11:13
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:10 
wei shen me zhe me jian dan de ti mu, ni yao xie zhe me duo dong xi jin qu ?

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long jiechen(long i)
{
   long j,sum=1;
   for(j=1;j<=i;j++)
    {
          sum=sum*j;

    }
   return sum;
}
 int main()
{
  printf("please input one number between 1 and 100 \n");
  long x,i,sumO=0;
  long sumJ=0;
  scanf("%d",&x);
  for(i=1;i<=x;++i)
   {

       if(i%2!=0)
       {
         sumJ=sumJ+jiechen(i);
       }
       else
       {
         sumO=sumO+jiechen(i);
       }
   }
    printf("%d ",sumJ);
    printf("%d\n",sumO);
   return 0;
}
wo de dai ma, gong ni can kao.

想抽苏烟了。
2014-01-31 01:54
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
以下是引用fl8962在2014-1-31 01:54:31的发言:

wei shen me zhe me jian dan de ti mu, ni yao xie zhe me duo dong xi jin qu ?

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
long jiechen(long i)
{
   long j,sum=1;
   for(j=1;j<=i;j++)
    {
          sum=sum*j;

    }
   return sum;
}
 int main()
{
  printf("please input one number between 1 and 100 \n");
  long x,i,sumO=0;
  long sumJ=0;
  scanf("%d",&x);
  for(i=1;i<=x;++i)
   {

       if(i%2!=0)
       {
         sumJ=sumJ+jiechen(i);
       }
       else
       {
         sumO=sumO+jiechen(i);
       }
   }
    printf("%d ",sumJ);
    printf("%d\n",sumO);
   return 0;
}
wo de dai ma, gong ni can kao.



大数阶乘  必须用字符数组模拟

DO IT YOURSELF !
2014-01-31 12:36
fl8962
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:539
专家分:2471
注 册:2012-10-17
收藏
得分:0 
回复 3楼 wp231957
关键是他的题目限定了是1到100之间的数

想抽苏烟了。
2014-02-01 04:33
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
以下是引用fl8962在2014-2-1 04:33:33的发言:

关键是他的题目限定了是1到100之间的数

你以为100的阶乘很小吗   难道你能用L00g L00g计算出来吗

DO IT YOURSELF !
2014-02-01 08:26
上海之恋
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-2-18
收藏
得分:0 
回复 2楼 fl8962
必须用到大整数,况且是找出我代码的问题、、、、
2014-02-02 15:18
快速回复:关于阶乘 ,运行代码后部分数据不对,实在找不出哪里有问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.044261 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved