100 的阶乘末尾有多少个0?

原创】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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值