阶乘计算
程序员文章站
2022-03-04 19:41:34
...
之前看到老师的一篇博客写到了大数阶乘的计算,即40的阶乘,值肯定超出了int所表示的整数的范围。所以用数组来保存计算即可,具体细节可以参照,https://blog.csdn.net/bufanq/article/details/51455207
需要注意点是:
计算每一位数组元素时,需要先乘,在加上进位,刚开始时将进位设为0;
还要老师说用size记录数组的长度,这个可以不必要。
#include "stdio.h"
#define m 400
int main()
{
int i,j;
int result;
int c = 0;
int a[m];
int n;
int k,v;
for(i=0;i<m;i++)
{
a[i] = 0;
}
a[0] = 1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=0;j<m;j++)
{
result = a[j]*i+c;
c = result/10;
a[j] = result%10;
}
for(k=m-1;k>=0;k--)
{
if(a[k])
break;//为什么用break跳出循环,从而记录位置打印,而不直接打印。
}
for(v=k;v>=0;v--)
{
printf("%d",a[v]);
}
printf("\n");
}
}
如下图所示
这里附上,为什么用break跳出循环从而再打印数组的每一位。
而不是直接用
for(k=m-1;k>=0;k--)
{
if(a[k]!=0)
printf("%d",a[i]);
}
这样子的话数组中所有不为0的数将全部忽略,而在计算过程中会产生有用的0,如120;
附上截图即可理解
可以看到5的阶乘为120,由于用了错误的代码导致变成了12。
上一篇: Linux基本命令
下一篇: 一道DDCTF题–滴~