163!尾数有多少个零?答案是39个。这不是重点,重点是如何得到答案。
我们知道一个数X尾数有零是因为X是10的倍数。凑巧的是10 = 5 x 2, 也就是说我们只要数数看一个数里面有多少个数是5的倍数或2的倍数,就可以知道这个数的阶乘尾数有多少个零。
更加凑巧的是,一个数中2的含量总是比5要多,因此我们只要关注5就行了。
以163!为例,163 / 5 = 32。这看上去像是正确答案,然而我们漏掉了25的存在。显然每隔25项,它就会多一个5出来。同理可得125也是这样。
因此正确答案是 163 / 5 + 163 / 25 + 163 / 125 = 39.
C++实现:
#include <iostream>
#include <math.h>
using namespace std;
void main()
{
int N;
int num_of_zero = 0;
cin >> N;
if (N < 0)
return;
for (int i=N, j=1; i>0; j++)
{
i /= 10;
num_of_zero += N / pow(5.0, j);
}
cout<<num_of_zero<<endl;
}