首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

ACM中阶乘的有关问题

2012-02-29 
ACM中阶乘的问题ACM中有道题求a!的末尾0的个数程序是:while(n){scanf(%d,&a)for(a!0){sum + a/5a

ACM中阶乘的问题
ACM中有道题求a!的末尾0的个数
程序是:
while(n)
{
scanf("%d",&a);
for(;a!=0;){
sum += a/5;
a=a/5;
}
printf("%d\n",sum);
sum=0;
n--;
}
a/5能求出来的原理是什么?

[解决办法]
n的因数中,只要有2和5,就能在末尾组成一个‘0’,而且因数2出现的次数绝对比因数5多,所以这道题只要求n!中因数5的个数就行了。
[解决办法]
一个2乘上一个5就可以产生一个0,a!的因子中2的个数肯定要比5多,所以只要数一下有多少个5就行了
a/5是小于等于a的且含有因子5的数的个数
a/5/5 是含有25的
。。。。
把这些全加起来就是a!中一共有多少个因子5了
[解决办法]
ls的问题,给个思路:
算n!的阶乘的时候,每乘上一个数i,就把i的因子5全部去掉,用一个变量记下5的个数,以便去掉同样个数的2,把每一步的结果模去10,就ok了

热点排行