求1到100的阶乘,应该用数组表示大整数吧.希望每行都注释清楚啊 用C语言啦啦.用数组的方式表示大整数,老师是这样提醒的

问题描述:

求1到100的阶乘,
应该用数组表示大整数吧.希望每行都注释清楚啊
用C语言啦啦.用数组的方式表示大整数,老师是这样提醒的,可是我还是不会
1个回答 分类:综合 2014-11-08

问题解答:

我来补答
#include
#define N 10000
int main()
{
static long int r[N]={1};
int i,j;
int k=0,l=0;
for(i=1;i
再问: 这个这个。。我想求它们一起的和
再答: #include #define N 10000 int main() { static long int r[N]={1}; static long int t[N]={0}; int i,j; int k=0,l=0,tk=0; for(i=1;i=0;j--) { printf("%04d",t[j]); } printf("\n"); return 0; } 1!+2!+3!+....+99!+100!= 94269001683709979260859834124473539872070722613982672442938359305624678223479506023400294093599136466986609124347432647622826870038220556442336528920420940313 请按任意键继续. . .
再问: 看不懂。,能给我每段来个注释么。谢谢
再答: //整体思路是用数组保存结果,每个int元素保存4位 

#include <stdio.h>

#define N 10000

int main()

{

 static long int r[N]={1};  //保存阶乘值

 static long int t[N]={0};  //保存和

 int i,j;

 int k=0,l=0,tk=0;    //k用来标记阶乘结果进位值,l用来标记长度,tk用来和的进位值

 for(i=1;i<=100;i++)

 {  

  for(j=0;j<=l;j++)

  {   

   r[j]=r[j]*i+k;    //每个元素都和i乘一次并且和上一位的结果的进位值相加

   k=r[j]/10000;  //求出本次乘法的进位值

   r[j]=r[j]%10000;    //留下后4位

   t[j]=t[j]+r[j]+tk;    //和数组的每个元素都和上面计算出的阶乘元素相加,并且和上一次求和产生的进位值tk相加

   tk=t[j]/10000;    //留下后4位

   t[j]=t[j]%10000;   //求出本次进位值

  }

  if(k)   //如果上面的循环计算完以后k不为0,那说明最高位有进位

  {

   l++;   //下次内循环长度+1

   r[j]=k;  //最高位==k

   t[j]+=r[j];  //和数组也加进去

   k=0;   //k置0

  }

  if(tk)  //如果tk不等于0.说明和数组最高位有进位,处理类似上面的

  {

   t[j]+=tk;  

   if(t[j]>10000)

   {

    t[j+1]=1;

    t[j]=t[j]%10000;

   }

   tk=0;

  }

  j=l;

 }

 printf("1!+2!+3!+....+99!+100!=\n%d",t[j--]);  // 输出 (最高4位不需要输出前置0,所以单独输出一次)

 for(;j>=0;j--)

 {

  printf("%04d",t[j]);  //4位有效数字,不满4位则前面补0

 }

 printf("\n");   

 return 0;

}
 
 
展开全文阅读
剩余:2000
上一页:希望高人解答