100!末尾有多少个0C语言

100!末尾有多少个0C语言

100!=1*2*3*...*100
结果中末尾0由以下三种情况生成:
(1)乘以100,得到2个0。
(2)乘以10、20、30、40、60、70、80或90得到1个0,共8个0。
(3)一个偶数乘以5得到1个0,共有5、15、35、45、55、65、85、95,共8个0。
(4)偶数乘以50会得到2个0。
(5)4乘以25或75各会得到2个0,共4个0。
故100!末尾共有24个0。

算法描述:
从4!=24开始计算,如果阶乘值末尾为0,就把末尾0去掉,计数器加1;如果末尾不为0,只保留个位数即可。最后再进行一次末尾0的扫描操作。

C语言程序:
#include <stdio.h>

void main()
{
int i;
long f = 24;
int c = 0;

for(i=5; i<=100; i++)
{
f *= i;

if(f%10==0)
{
f /= 10;
c++;
}
else
{
f = f % 10;
}
}

while(f%10 == 0)
{
f = f / 10;
c++;
}

printf("末尾0的总数量:%d", c);
}

运行结果:
末尾0的总数量:24
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-05-04
以C语言的数据类型来求100的阶乘不造成数据过大溢出是不现实的,所以不能在求得100的阶乘之后再数它末尾有多少个0,只能在累乘的过程中遇到一个0就干掉,最后数总共干掉了多少个,至于由于溢出前面丢掉了多少位的数就管不了了,代码如下:main()
{
long a=1;
int i,n=0;
for(i=2;i<=100;i++)
{
a*=i;
if(a>10000)a=a%10000; /*只要末几位不变对乘法结果的末几位就没有影响,所以在此限定a不要过大*/
loop1: if(a>10&&a%10==0){a/=10;n++;goto loop1;} /*为了防止十位也是0,所以返回来再判断一次*/
}
printf("%d\n",n);
}结果是24本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网