问题描述: GSM网络最重要的部分是所谓的基站收发站(BTS)。这些收发器形成了称为“蜂窝”的区域(蜂窝电话就是以这个术语命名的),每个电话都以最强的信号(简单地看)连接到BTS。当然,BTS需要一些关注,技术人员需要定期检查它们的功能。
ACM技术人员现在面临一个非常有趣的问题。给定一个BTS的集合,他们需要找到访问所有给定点的最短路径,然后返回公司的总部大楼。程序员们已经花费了几个月的时间研究这个问题,但是没能得出结果。他们不能足够快地找到问题的解决方法。很长一段时间后,一个程序员在一篇会议文章中发现了这个问题。不幸的是,他发现问题是所谓的“旅行家问题”,非常难解决。如果我们有N个BTS需要访问,我们可以以任何的顺序访问他们,给定N!种可能去执行。表示该数字的函数被称为阶乘,可以计算为1.2.3.4....N的乘积。
程序员们明白他们除了解决问题之外别无选择。但是因为他们已经接受到政府的研究许可,他们需要继续他们的研究,产生一些结果。所以他们开始研究阶乘函数的行为。
例如:他们定义了函数Z。对于任何正整数N,Z(N)是N!的数字中0的个数。他们注意到这个函数永远不会递减。如果我们有两个数N1<N2,那么Z(N1)<=Z(N2)。这是因为我们永远不会因为乘以任何正数而“失去”任何末尾的零。我们只能得到新的零。函数Z是非常有趣的,所以我们需要一个能有效确定其值的计算机程序。
输入:There is a single positive integer T on the first line of input. It stands for the number of numbers to follow. Then there is T lines, each containing exactly one positive integer number N, 1 <= N <= 1000000000.
解题思路:每5个数会产生1个0,5个数中的5个数又会产生一个新的0
#include <stdio.h>
#include <iostream>
using namespace std;
int getZero(int n)
{
int tmp = n,result=0;
while(tmp!=0)
{
tmp /= 5;
result += tmp;
}
return result;
}
int main()
{
int N;
while(cin>>N)
{
int num,mycount;
for(int i=0;i<N;i++)
{
cin>>num;
mycount = getZero(num);
cout<<mycount<<endl;
}
}
return 0;
}