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


分析分析吧

 

 

posted @ 2013-07-31 21:06  jlins  阅读(359)  评论(0编辑  收藏  举报