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

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



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

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