读书人

大数阶乘算法哪儿错了?解决思路

发布时间: 2012-03-02 14:40:28 作者: rapoo

大数阶乘算法哪儿错了?
#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;
}

[解决办法]

C/C++ code
    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;*/         }        } 

读书人网 >软件架构设计

热点推荐