阶乘的和问题,输入1=<n<=25,当n比较大时输出了错误的答案
int main(){
int n;
int fac=1;
int sum=0;
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
j=j%10007;
fac=fac*j;
}
fac=fac%10007;
sum=sum+fac;
fac=1;
}
int t;
t=sum%10007;
printf("%d",t);
return 0;
}
计算时使用了公式
12行fac溢出,在后面对10007取余就好
fac=fac*j%10007;
n小的时候正确,n大的时候错误,很显然数据溢出了
int放不下了呗,换成更大的类型来存
int main(){
int n;
int fac=1;
int sum=0;
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
j=j%10007; //这行有啥意义呢?j还能大于1万??
fac=fac*j; //fac只是个int类型,13的阶乘就溢出了,25的阶乘连超出8字节存储空间,应该在这里就进行求余才行
}
fac=fac%10007; //为啥求余10007呢?
sum=sum+fac;
fac=1;
}
int t;
t=sum%10007;
printf("%d",t);
return 0;
}