转载请注明出处:http://blog.csdn.net/lttree
Factorial
Time Limit: 1500MS   Memory Limit: 65536K
Total Submissions: 13993   Accepted: 8678

Description

The most important part of a GSM network is so called Base Transceiver Station (BTS). These transceivers form the areas called cells (this term gave the name to the cellular phone) and every phone connects to the BTS with the strongest signal (in a little simplified
view). Of course, BTSes need some attention and technicians need to check their function periodically. 



ACM technicians faced a very interesting problem recently. Given a set of BTSes to visit, they needed to find the shortest path to visit all of the given points and return back to the central company building. Programmers have spent several months studying
this problem but with no results. They were unable to find the solution fast enough. After a long time, one of the programmers found this problem in a conference article. Unfortunately, he found that the problem is so called "Travelling Salesman Problem" and
it is very hard to solve. If we have N BTSes to be visited, we can visit them in any order, giving us N! possibilities to examine. The function expressing that number is called factorial and can be computed as a product 1.2.3.4....N. The number is very high
even for a relatively small N. 



The programmers understood they had no chance to solve the problem. But because they have already received the research grant from the government, they needed to continue with their studies and produce at least some results. So they started to study behaviour
of the factorial function. 



For example, they defined the function Z. For any positive integer N, Z(N) is the number of zeros at the end of the decimal form of number N!. They noticed that this function never decreases. If we have two numbers N1 < N2, then Z(N1) <= Z(N2). It is because
we can never "lose" any trailing zero by multiplying by any positive number. We can only get new and new zeros. The function Z is very interesting, so we need a computer program that can determine its value efficiently. 


Input

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.

Output

For every number N, output a single line containing the single non-negative integer Z(N).

Sample Input

6
3
60
100
1024
23456
8735373

Sample Output

0
14
24
253
5861
2183837

题目:http://poj.org/problem?id=1401

题目是求N!中末尾0的个数。

这道题,是我曾经在经典例题100道中看到的,做出来的,可是,发现理解错了。(感谢一位网友的提醒啊!)

所以,又一次做一下,发现poj上有这道题,正好能够拿来測试一下做的是否正确。

这道题做法,显然不能求出来阶乘再数0的个数。

所以,要换一个思路。

为什么会产生0呢?源于2x5,于是能够通过数有多少个(2,5)因子对来推断有多少个0.

我们又能够发现,5的个数永远会大于2的个数。

又能够简化为数5的个数来做。

当时,还非常年轻,做法让如今的我看,有点纠结啊。。

当时做的是,从1到N(所输入的数)循环,看看能不能被5整除,若能整除,继续除5,直到不能整除为止。

这个做法显然答案正确,可是在这道题里,TLE必须的。。。

#include <stdio.h>
int main()
{
int i,N,k,t;
double num;
bool prime;
scanf("%d",&t);
while( t-- )
{
scanf("%d",&N);
k=0;
for(i=1;i<=N;i++) //查看有多少个5
{
num=i/5.0;
if(num-int(num)==0)
prime=true;
else
prime=false;
while(num>=1&&prime==true)
{
num/=5.0;
if(num-int(num)==0)
prime=true;
else
prime=false;
k+=1;
}
}
printf("%d\n",k);
}
return 0;
}

然后,如今想想,这道题,不须要这么麻烦啊。

数5的倍数,就能够了。

以698为例:

698/5=139.6→取整→139     (表示有139个数为5的倍数) sum=sum+139 (sum初始化为0)

139/5=27.8 →取整→27        (表示有27个数为25的倍数)sum=sum+27

(为什么25的倍数,仅仅加了一遍,不应该加 27*2的吗,25表示两个5?

由于,25的之前有一个5,在第一遍139个里面算过一次了,所以不须要加两遍。)

27/5=5.4 → 取整→5             (表示有5个数为125的倍数)sum=sum+5

5/5=1 → 取整 → 1
     (表示有1个数为625的倍数) sum=sum+1

1/5=0  结束。

所以答案是   139+27+5+1=172

恩,所以程序,就非常easy了:

/**************************************
***************************************
* Author:Tree *
*From :http://blog.csdn.net/lttree *
* Title : Factorial *
*Source: poj 1401 *
* Hint : N!求0的个数 *
***************************************
**************************************/
// scanf 125MS, cin 422MS
#include <stdio.h>
int main()
{
// sum为答案,存储每次除5后的数(累加)
int t,n,sum;
scanf("%d",&t);
while( t-- )
{
sum=0;
scanf("%d",&n);
while( n )
{
n/=5;
sum+=n;
}
printf("%d\n",sum);
}
return 0;
}

ACM-简单题之Factorial——poj1401的更多相关文章

  1. 2道acm简单题(2010):1.猜数字游戏;2.字符串提取数字并求和;

    //第一题是猜数字的游戏.//题目:随即产生一个3位的正整数,让你进行猜数字,//如果猜小了,输出:"猜小了,请继续".//如果猜大了,输出:"猜大了,请继续" ...

  2. 2道acm简单题(2013):1.(时分秒)时间相减;2.主持人和N-1个人玩游戏,每个人说出自己认识的人数,判断其中是否有人说谎。

    /*1.题目:输入一个数,代表要检测的例子的个数,每个例子中:输入两个时间(格式HH:MM : SS),前面时间减去后面时间,输出在时钟上显示的时间,格式一样,如果是以为数字的前面补零.*//**思路 ...

  3. 3道acm简单题(2011):1.判断是否能组成三角形;2.判断打鱼还是晒网;3.判断丑数。

    //1.输入三个正整数A.B.C,判断这三个数能不能构成一个三角形.//思路:最小的两边之和是否是大于第三边#include<iostream>#include<algorithm& ...

  4. acm.njupt 1001-1026 简单题

    点击可展开上面目录 Acm.njupt 1001-1026简单题 第一页许多是简单题,每题拿出来说说,没有必要,也说不了什么. 直接贴上AC的代码.初学者一题题做,看看别人的AC代码,寻找自己的问题. ...

  5. 杭电acm 1037题

    本题应该是迄今为止最为简单的一道题,只有一组输入,输出也简单.... /****************************************** 杭电acm 1037题 已AC ***** ...

  6. 杭电acm 1038题

    本题比较简单,但是需要掌握几个小技巧,先上代码 /************************************* 杭电ACM 1038题,已AC ********************* ...

  7. acm刷题序列

    POJ推荐50题 著名的北邮acm训练队推荐50题 https://blog.csdn.net/bat67/article/details/71735012 都是poj上的题 1000:会教会你如何使 ...

  8. 杭电acm 1033题

    Problem Description For products that are wrapped in small packings it is necessary that the sheet o ...

  9. 牛客网 牛客小白月赛1 B.简单题2-控制输出格式

    B.简单题2   链接:https://www.nowcoder.com/acm/contest/85/B来源:牛客网 和A题一样,控制输出格式就可以. 代码: 1 #include<iostr ...

随机推荐

  1. WPF4字体改善

    原文 WPF4字体改善 WPF4对字体渲染做了很大的改善,增加了TextOptions属性,该属性可以设置TextFormattingMode,TextRenderingMode,TextHintin ...

  2. 我的Android进阶之旅------>HTTP 返回状态值详解

    (本文转载于:http://blog.csdn.net/ithomer/article/details/10240351) 当用户点击或搜索引擎向网站服务器发出浏览请求时,服务器将返回Http Hea ...

  3. CodeForces 228D. Zigzag(线段树暴力)

    D. Zigzag time limit per test 3 seconds memory limit per test 256 megabytes input standard input out ...

  4. ios9怎么设置6位密码 ios9设置6位密码图文教程

    在原来的 iOS 系统中,只有四位数字密码与复杂密码之分,而在 iOS9 系统中却多出了一个六位数字密码,那ios9怎么设置6位密码,今天小编就为大家带来ios9设置6位密码图文教程   在原来的 i ...

  5. Azure 云 Web 应用程序

    Azure 云 Web 应用程序 原文:Getting Started作者:Rick Anderson翻译:谢炀(Kiler)校对:孟帅洋(书缘).刘怡(AlexLEWIS).何镇汐 设置开发环境 安 ...

  6. Android UI 之WaterFall瀑布流效果

        所谓瀑布流效果,简单说就是宽度相同但是高度不同的一大堆图片,分成几列,然后像水流一样向下排列,并随着用户的上下滑动自动加载更多的图片内容.     语言描述比较抽象,具体效果看下面的截图:   ...

  7. CIconListBox带图标的列表框类

    有时候,我们需要在列表框ListBox中插入带图标的文字项,这就需要自己派生一个类出来了,网上的一个CIconListBox类还不错,网站http://www.codeguru.com/Cpp/con ...

  8. 体系结构复习2——指令级并行(分支预測和VLIW)

    第五章内容较多,接体系结构复习1 5.4 基于硬件猜測的指令级并行 动态分支预測是在程序运行时.依据转移的历史信息等动态确定预測分支方向.主要方法有: 基于BPB(Branch Prediction ...

  9. ubuntu12.04 安装 opencv 2.4.8(非源代码编译)

    一:安装所须要的各种库,如GTK3.xx 安装GCC:sudo apt-get install build-essential 安装CMakesudo apt-get install cmake su ...

  10. 关于VC6编译LPDIRECT3D8不通过的问题

    重装了系统,打开以前的工程看看,重新编译发现类似的错误: error C2146: syntax error : missing ';' before identifier 'lpdi' fatal ...