计算阶乘中0的个数

来源:互联网 发布:服装批发软件手机版 编辑:程序博客网 时间:2024/05/22 17:24

题目:
给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N=3628800.
N的末尾有两个0

1、分析:阶乘虽然大,但是求0的个数只有2x5,4x5,6x5,8x5才有0,但是5的数目最小,且都
要用到5,即可转化为求N!中5的个数
若N = 5,则5的个数为1个
N = 6,1个,
N = 10,有5和2x5两个5
N = 15,有5和2x5和3x5三个5,
N = 20,有5和2x5和3x5和4x5四个5
N = 25,有5和2x5和3x5和4x5和5x5五个5
……
即5的个数为Z = N/5+N/5^2/N/5^3……

2、分析:若N = 3,则N!=6;其二进制为110;最低位1的位置为2
若N = 4,则N!=24,其二进制为11000,最低位为4
……
则最低位的数应为N中2的个数加1

#include<iostream>using namespace std;int findZero(int n){    if (n < 5)        return 0;    int count = 0;    while (n)    {        count += n / 5;        n /= 5;    }    return count;}int findLowerLocation(int n){    if (n < 2)        return 0;    int count = 0;    while (n)    {        //使用移位操作速度比除法要快        n = n >> 1;        count += n;    }    return count + 1;}int main(){    int n = 4;    cout << findZero(n) << endl;    cout << findLowerLocation(n) << endl;    system("pause");    return 0;}
0 0
原创粉丝点击