N的阶乘末尾有多少0呢?首先,得思考一下0到底是由哪些数贡献的,显而易见,一个2和5能贡献一个0,然后我们只需要计算2和5的因子的个数即可,最后取最小值就是0的个数!
N的阶乘是从1到N的乘积,因子2的个数明显多于5,只需要计算因子5的数量即可。1-N中5的倍数有N/5个,5²的倍数有N/5²个,5³的倍数有N/5³个,……,等等。因此易于求得因子5的个数,见代码6-11行。
计算N的阶乘因子2的个数可以得到二进制表示中末尾0的个数!
#include <iostream>
using namespace std;
int compute(int n, int m)
{
int i = 0;
while (n) {
n /= m;
i += n;
}
return i;
}
int main()
{
int n;
while (cin >> n) {
cout << compute(n, 2) << endl;
cout << compute(n, 5) << endl;
}
return 0;
}