CSDN真恶心

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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



posted on 2011-12-22 22:30  Kid桑  阅读(210)  评论(0编辑  收藏  举报