最近跟某中同学一起交流学习C++代码感觉不错,下面分享一道题:(c++)
阶乘
(Factorial.pas/c/cpp)
【问题描述】
一个GSM网络中最重要的部分就是所谓基站(BTS)。这些收发器构成称为 “细胞 ” 的区域 ,为手机提供蜂窝网络 ,每一个电话连接到信号最强的BTS。当然,BTS需要技术人 员定期检查其功能。
最近ACM技术人员面临了一个非常有趣问题。给定一组要访问的BTS,他们需要找到访问所有的已知点的最短路径, 最后回到公司中央大楼。程序员已经花了好几个月的时间研究这个问题,但没有结果。他们找不到足够的解决方案很长一段时间后程序员在某篇文献里发现这个问题。不幸的是,这个问题是所谓“旅行商问题”,很难解决的问题。如果我们 要访问N个BTS,我们可以任何顺序访问 ,因此总的可能性有 N! 种,也即需要将1到 N的整数都相乘。即使 N很小,乘积也会大。
程序员知道他们没有机会解决这个 问题。但是, 因为他们已经获得了政府的研究资助他们需要继续研究, 至少 产生 一些结果。于是他们开始研究 阶乘的特点 。
例如,他们定义了 函数 Z。对任意正整数 n,Z(n)是 n!在十进制下末尾零的个数。 他们注意到,随着 n的增大, Z(n) 永远不会减少。如果我们有两个数 N1 < N2,则有 Z(N1 )< = Z(N2 )。这是因为我们永远不可能 因为乘上任何正整数而“失去”一些 尾零 。相反,我 们还可能 得到新的 尾零。 这个函数是非常有趣的,所以我们需要一个能有效地确定其值的计算机程序。
【输入格式】
输入的第一行有个正整数 T,代表 有几组数据 。接下来 接下来 T行,每 行,每 行包含 一个 正整数 N(1 <= N <=1000000000)。
【输出格式】
对于每个 N,在单独一行中输出 Z(N) 的结果。
【输入出样例】
Factorial.in:
6
3
60
100
1024
23456
8735373
Factorial.out:
0
14
24
253
5861
2183837
这个挺好玩的,下面给出实现Z函数的c++最优代码(自己感觉):
供参考。
更新:这个不是最优代码。。