c\c++ 这是一个大数阶乘的程序 能帮我注释一下吗?求高手
解决时间 2021-02-18 20:18
- 提问者网友:战皆罪
- 2021-02-18 07:18
#include
int a[20000];
int main()
{
int n, i, j, f, l, t;
while(scanf("%d",&n)&&n>=0)
{
a[0]=1;
if(n==0)
{
printf("1\n");
continue;
}
l=1;
for(i=1;i<=n;i++)
{
f=0;
for(j=0;j {
t=i*a[j];
a[j]=(t+f)%10;
f=(t+f)/10;
}
while(f!=0)
{
a[j]=f%10;
j++;
l++;
f=f/10;
}
}
for(i=l-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n");
}
}
最佳答案
- 五星知识达人网友:冷風如刀
- 2021-02-18 08:19
#include
int a[20000];
int main()
{
int n, i, j, f, l, t;
while(scanf("%d",&n)&&n>=0) //不断读入整数n,求n!
{
a[0]=1; //数组a存储计算的结果(倒序存储,即a[0]为最低位),初值定为1
if(n==0) //因为0!=1,对这个作特殊处理
{
printf("1\n");
continue;
}
l=1; //l为a[]中所存的数字的实际位数,一开始是1(1是1位数)
for(i=1;i<=n;i++) //这个循环是整个程序的核心,第i次循环后就可以求出i!
{
f=0; //模拟竖式乘法计算。f为进位,设为0(因为并没有哪一位向个位进位)
for(j=0;j
{
t=i*a[j]; //相乘的结果放在临时变量t中
a[j]=(t+f)%10; //最终乘积的这一位应是(t+进位)的个位数
f=(t+f)/10; //这一位相乘又引起了向更高位的进位
}
while(f!=0) //逐位相乘结束后,若最高位进位>0,说明结果的位数比原来a[]中存储的数字的位数要多,继续向上进位(要保证a[]中存的每一个数都是0~9之间的)
{
a[j]=f%10;
j++;
l++; //l也要增加,因为结果的位数变长了
f=f/10;
}
}
for(i=l-1;i>=0;i--) //再把结果从高位向低位输出
{
printf("%d",a[i]);
}
printf("\n");
}
}
我要举报
大家都在看
推荐资讯