数字问题 之 阶乘游戏

N ! = 1 *2 * 3 * 4 * … * n

 

问题1:求N的阶乘

 

一定要用递推的方式来求N的阶乘,以防采用递归方法耗费过多的时间

int GetFactorial(int n)

{

    int ans = n;

    while (--n)         // note, here cannot be 'n--'

        ans *= n;

    return ans;

}

 

 

问题2: 求阶乘尾数0的个数,如 N = 12,则 12的阶乘尾数有两个0

 

何时会产生0?

2 * 5 ,  4 * 5,  x * 10 …

22 * 23 * 24 * 25 -> 产生2个0 … 因为25为以上算式提供了两个5

由此可以总结出:只要出现5,即会在结尾处产生0

因为整个数列中偶数的个数一定多于5的个数,5*偶数->产生0,由此可以得到代码如下

 

int CountZero(int n)

{

    int zeroCount = 0;

    for (int i = 5; i <= n;++i)

    {

        int value = i;

        while (value % 5 == 0)

        {

            zeroCount++;

            value /= 5;

        }

    }

    return zeroCount;

}


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值