ACM-简单的主题Factorial——poj1401
| Time Limit: 1500MS | Memory Limit: 65536K | |
| Total Submissions: 13993 | Accepted: 8678 |
Description
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
Output
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的更多相关文章
- ROS笔记——创建简单的主题发布节点和主题订阅节点
在安装好ROS后,接着学习如何创建节点和节点之间的通信方式,以一个简单的主题发布节点和主题订阅节点说明. 节点是连接ROS网络等可执行文件,是实现某些功能的软件包,也是一个主要计算执行的进程. 一.创 ...
- ACM-简单题之Factorial——poj1401
转载请注明出处:http://blog.csdn.net/lttree Factorial Time Limit: 1500MS Memory Limit: 65536K Total Submis ...
- ACM——简单排序
简单选择排序 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte总提交:836 测试通过:259 描述 给定输入排序元素 ...
- RabbitMQ简单应用の主题模式(topic)
Topic exchange(主题转发器) 发送给主题转发器的消息不能是任意设置的选择键,必须是用小数点隔开的一系列的标识符.这些标识符可以是随意,但是通常跟消息的某些特性相关联.一些合法的路由选择键 ...
- hdu acm 简单暴力1004
字符串匹配函数strcmp 直接使用来判断两字符串是否完全相等 用数组存每个单词的个数时 初始化为零就错 初始化为一时就正确 也不知道为什么
- 2道acm简单题(2013):1.(时分秒)时间相减;2.主持人和N-1个人玩游戏,每个人说出自己认识的人数,判断其中是否有人说谎。
/*1.题目:输入一个数,代表要检测的例子的个数,每个例子中:输入两个时间(格式HH:MM : SS),前面时间减去后面时间,输出在时钟上显示的时间,格式一样,如果是以为数字的前面补零.*//**思路 ...
- 3道acm简单题(2011):1.判断是否能组成三角形;2.判断打鱼还是晒网;3.判断丑数。
//1.输入三个正整数A.B.C,判断这三个数能不能构成一个三角形.//思路:最小的两边之和是否是大于第三边#include<iostream>#include<algorithm& ...
- 2道acm简单题(2010):1.猜数字游戏;2.字符串提取数字并求和;
//第一题是猜数字的游戏.//题目:随即产生一个3位的正整数,让你进行猜数字,//如果猜小了,输出:"猜小了,请继续".//如果猜大了,输出:"猜大了,请继续" ...
- wordpress学习四: 一个简单的自定义主题
在学习三里分析了自带的一个例子,本节我们就自己仿照他做个简单的吧,重点是调用wordpress封装好的函数和类,css和html可以稍好在调整. 将wp带的例子复制一份处理,重新名个名字. 清空ind ...
随机推荐
- Code digest
private void travelDir(String filepath) { String threadName = Thread.currentThread().toString(); log ...
- Java里泛型有什么作用
1 泛型赋予了类型參数式多态的能力 2 泛型的第一个优点是编译时的严格类型检查,提高了程序的安全性和健壮性,这是集合框架最重要的特点. 3 泛型消除了绝大多数的类型转换.假设没有泛型,当你使用集合框架 ...
- Android学习之RecyclerView
RecyclerView是android-support-v7-21版本号中新增的一个Widget,官方介绍RecyclerView 是 ListView 的升级版本号,更加先进和灵活. 开发环境 - ...
- struts1吊牌<logic:iterate>
<logic:iterate>主要用于处理网页上的输出集合,集合是其中一般下列之一: 1. java对象的数组 2. ArrayList.Vector.HashMap等 具体使用方法请參考 ...
- HTML5分析实战WebSockets一个简短的引论
HTML5 WebSockets规范定义了API,同意web页面使用WebSockets与远程主机协议的双向通信. 介绍WebSocket接口,并限定了全双工通信信道,通过套接字网络. HTML5 W ...
- Android重力加速度传感器数据去噪
public void onSensorChanged(SensorEvent event) { final float alpha = 0.8; gravity[0] = alpha * gravi ...
- OCP读书笔记(21) - 题库(ExamA)
Administer ASM disk groupsBack up the recovery catalogConfigure backup settingsConfigure, Monitor Fl ...
- 波折yosemite下载过程
已经知道Yosemite正式宣布了这一消息,为了尽快有效地使用该系统尽可能.上学前把一个新的硬盘驱动器准备就绪-但不幸的是,我不知道是谁动手当天学校欠网关停电,我没有强迫受害者上课听老师讲废话(这是什 ...
- ABP领域层——工作单元(Unit Of work)
ABP领域层——工作单元(Unit Of work) 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之12.ABP领域层——工作单元(Unit Of work) ...
- 第14章 命令模式(Command Pattern)
原文 第14章 命令模式(Command Pattern) 命令模式(Command Pattern) 概述 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如 ...