关于阶乘 ,运行代码后部分数据不对,实在找不出哪里有问题
题目描述:输入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 编辑 ]