大数阶乘算法哪儿错了?
#include<stdio.h>
int main()
{
int temp,n,a[200],carry,digit,i,j,m;
a[0]=1;
carry=0;
digit=1;
printf("请输入大小:");
scanf("%d",&n);
for(i=2;i<=n;i++)
{
for(j=1,carry=0;j<=digit;j++)
{
temp=a[j-1]*i+carry;
a[j-1]=temp%10;
carry=temp/10;
}
while(carry)
{
digit++;
a[digit-1]=carry%10;/*我为什么不能把这句代码替换为:a[digit-1]=carry,因为carry肯定是小于10的数*/
carry/=10;/*这句什么意思?*/
}
for(m=digit;m>=1;--m)
{
printf("%d",a[m-1]);
}
return 0;
}
[解决办法]
for(i=2;i<=n;i++) { for(j=1,carry=0;j<=digit;j++) { temp=a[j-1]*i+carry;/*当i的值很大时,譬如100,那么temp>100*/ a[j-1]=temp%10; carry=temp/10; /*这时,carry>10,这就是你为什么不能替换的原因*/ } while(carry) { digit++; a[digit-1]=carry%10;/*我为什么不能把这句代码替换为:a[digit-1]=carry,因为carry肯定是小于10的数*/ carry/=10;/*这句什么意思?*/ /*这条代码等价于carry=carry/10;*/ } }