原创】100的阶乘结果中末尾含有几个数字0
【题目】今天在网上看到一道题目:100!结果数值中末尾有几个0?
【分析】计算100!会溢出,所以使用将10分拆为10 = 2X5,在1~100中,寻找2的个数N(比如,4有两个2),以及5的个数M,结果 X = M > N ? N : M;
【图表分析】 现在只分析5,
1,2,3,4,5,6,...,25, ...,100
除以5后为: 0,0,0,0,1,0,...,5,...,20,此时有20个5
再对 1,2,3,...,20进行同样计算:
除以5后为: 0,0,0,0,1,...,4,此时有4个
因为4 < 5,所以最终结果20 + 4 = 24;
同样验证1000!为:
1000/5 = 200
200/5 = 40
40/5 = 8
8/5 = 1
共计:200 + 40 + 8 + 1 = 249个0
同样考虑2,要远多于5的存在,
至此,完结
#include <stdio.h>
int getfn_1(const int n)
{
int counter=0; //the counter!
int i;
for(i=4; i<=n; i++)
{
int flag;
flag=i;
while(flag>=5&&flag%5==0)
{
flag/=5;
counter++;
}
}
return counter;
}
int main(void)
{
///int ret;
int fact_n = 100;
printf("100!有%d个零\n",getfn_1(fact_n));
return 0;
}