首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-03-02 
大数阶乘算法哪儿错了?#includestdio.hint main(){int temp,n,a[200],carry,digit,i,j,ma[0]1carry0

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

热点排行