题目:
给定一个整数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;
}