永发信息网

c\c++ 这是一个大数阶乘的程序 能帮我注释一下吗?求高手

答案:1  悬赏:40  手机版
解决时间 2021-02-18 20: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");
}
}
最佳答案
#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");
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
【两个小题 英语填空 】
建筑中,做技术型人才好还是管理型,做造价员
绿盛茶庄地址有知道的么?有点事想过去
赵匡胤是赵子龙的后代吗
硬盘中,蓝盘和紫盘有什么区别?
智能扫地机器人用来清理狗毛怎么样?我家有两
广州哪里有纹身贴纸买?
马上去三亚,不知那边天气如何?穿什么衣服合
张大伯每天从报社以每份0.4元的价格购进100份
【义务教育新课程标准】最新的《全日制义务教
航拍效果 gopro4好还是dji 镜头好
梦见自己在山林里搳猪草掉下山了
带鬼字旁的成语
男性患者67岁,半月来在爬楼梯时常感心前区疼
交通银行信用卡申请办理过程中 会打多少次电
推荐资讯
lastspell怎么发动
深圳哪里有期货培训机构
武汉有韩国V牌眼镜店吗?
人人拓展培训真人CS神山公园基地怎么去啊,有
冰箱变温室不能调节温度,一直显示00,是咋回
男的怎么打粉底会显得脸小?还有男的应该怎么
去纽约大学读金融学研究生容易吗
狭盗猎车手之罪恶都市作弊码在哪里输入
喝牛奶吃鸡蛋是杀生吗
我的是note3. 按键是物理按键和触摸按键,想
protel 99贴片封装。
丹栀逍遥散适用于下列哪种病证:A.乳汁自出,
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?