参见大数的阶乘https://blog.51cto.com/14232799/2365277
此次的程序与大数阶乘相似,只改变了数组的输出顺序,以及添加了计数器用来数出末尾有多少个0。
首先定义调用函数到
<代码> int成(int, int x [], int *长度) { 整数n,临时,jw=0;//临时临时变量,jw为一次计算结果的进位 (n=0;n & lt;=*长度;n + +) { temp=x [n] * k + jw; x [n]=temp % 10; jw=temp/10; } 而(jw) { x [n]=jw % 10;//当有进位时存入进位 jw=jw/10; n + +,//数组填充长度变化 } *长度=n - 1;//计算次数变化 返回0; }代码>
编辑主函数,定义各种需要的变量,常规操作逆序输出计算结果。
最后加上计数器即可。
<代码> (i=2;我& lt;=m;我+ +) { 为(x,我和p);//调用函数计算结果存入数组 } (我=0;我& lt;=p;我+ +)//输出计算结果末尾0的个数 { 如果(x[我]==0) 和+ +,//累加器 } (我=0;我& lt;=p;我+ +)//输出结果 printf (" % d”x[我]); printf (" \ n "); printf("末尾一共% d个0 \ n”,总和);代码>
完整源代码:
<代码> # include# include int成(int, int x [], int *长度) { 整数n,临时,jw=0; (n=0;n & lt;=*长度;n + +) { temp=x [n] * k + jw; x [n]=temp % 10; jw=temp/10; } 而(jw) { x [n]=jw % 10; jw=jw/10; n + +; } *长度=n - 1; 返回0; } int main () { int x [100000]; int i m; int和=0; int p=0; printf(“请输入要计算的阶乘数:\ n”); scanf (“% d”,和米); x [0]=1; (我=2;我& lt;=m;我+ +) { 为(x,我和p); } (我=0;我& lt;=p;我+ +) { 如果(x[我]==0) 和+ +; } (我=0;我& lt;=p;我+ +) printf (" % d”x[我]); printf (" \ n "); printf("末尾一共% d个0 \ n”,金额); 系统(“暂停”); 返回0; }代码>