N!末尾有多少个零

题目一:210!最后结果有几个零。
请自己思索10分钟以上再看解释




















凡是这种题目必有规律可言, 关键是你找到这个规律的恒心。可采用笨拙的方法思考。
1!  =  1                               ----  无0
2! = 2 * 1! = 2                        ----  无0
3! = 3 * 2! = 6                        ----  无0
4! = 4 * 3! = 24
5! = 5 * 4!  = 120                      有了一个零
思考这个0是怎么出现的                    ------------ 5与一个偶数相乘得到的结果
这个就是规律
10! = 2*5 * 9!                           -------------再出现一个0
15! = 3*5 * 14!                          -------------再出现一个0
..
25! = 5*5 * 24!                          --------------这里出现两个0


125! = 5*5*5*5 *124!                     ---------------出现四个零


结果末尾有多少个0的问题可以转换为N!乘式中可以分解出多少个5的问题.因为5和其前面的任何一个偶数相乘都会产生0


如果口算:
在由1到N的数中共可以分解出多少个5.例如25!,可以分解出5(1×5)、10(2×5),15(3×5),25(5×5),共可以分解出5个5,所以25!末尾有5个0;


上代码:
int ZeroNum(int n)
{
    int j,num=0;
    for(int i=n;i>1;i--)
    {
            j=i;
            while(j%5==0)
            {
               num++;
               j/=5; 
            }         
    }
     
    return num;
}


很好理解了吧

题目二:1!+2!+3!+4!+……+100!最后结果个位数字是几?




好算了吧,5!以后末尾都是零,所以 为1! + 2! +3! +4! 的末位值




问题三:求N!的二进制表示中最低位1的位置?

由十进制数转换为2进制数的过程知要求求N!的二进制表示中最低位1的位置,即求乘因式中含有2的个数.

int ZeroNum(int n)
{
    int j,num=0;
    for(int i=n;i>1;i--)
    {
            j=i;
            while(j%2==0)
            {
               num++;
               j/=2; 
            }         
    }
     
    return num;
}

分析分析吧

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值