1124 Factorial阶乘

问题描述: 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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值