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了