• 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;
    }


    分析分析吧

  • 相关阅读:
    Step By Step(Lua-C API简介)
    Step By Step(Lua系统库)
    复制控制( 下 ) --- 自定义析构函数
    复制控制( 中 ) --- 重载赋值运算符
    复制控制( 上 ) --- 自定义复制函数
    泛型算法结构
    流迭代器 + 算法灵活控制IO流
    一个文本查询程序的实现
    multimap容器和multiset容器中的find操作
    实用的关联容器
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3228842.html
Copyright © 2020-2023  润新知