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的更多相关文章
- 2道acm简单题(2010):1.猜数字游戏;2.字符串提取数字并求和;
//第一题是猜数字的游戏.//题目:随即产生一个3位的正整数,让你进行猜数字,//如果猜小了,输出:"猜小了,请继续".//如果猜大了,输出:"猜大了,请继续" ...
- 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& ...
- acm.njupt 1001-1026 简单题
点击可展开上面目录 Acm.njupt 1001-1026简单题 第一页许多是简单题,每题拿出来说说,没有必要,也说不了什么. 直接贴上AC的代码.初学者一题题做,看看别人的AC代码,寻找自己的问题. ...
- 杭电acm 1037题
本题应该是迄今为止最为简单的一道题,只有一组输入,输出也简单.... /****************************************** 杭电acm 1037题 已AC ***** ...
- 杭电acm 1038题
本题比较简单,但是需要掌握几个小技巧,先上代码 /************************************* 杭电ACM 1038题,已AC ********************* ...
- acm刷题序列
POJ推荐50题 著名的北邮acm训练队推荐50题 https://blog.csdn.net/bat67/article/details/71735012 都是poj上的题 1000:会教会你如何使 ...
- 杭电acm 1033题
Problem Description For products that are wrapped in small packings it is necessary that the sheet o ...
- 牛客网 牛客小白月赛1 B.简单题2-控制输出格式
B.简单题2 链接:https://www.nowcoder.com/acm/contest/85/B来源:牛客网 和A题一样,控制输出格式就可以. 代码: 1 #include<iostr ...
随机推荐
- Java网络编程:利用Java mail包发送电子邮件
下面代码是利用Java mail包封装了一个发送邮件的类 import java.io.File; import java.util.ArrayList; import java.util.Date; ...
- C#:总结页面传值几种方法
小知识点: 1. W7自带 .NetFrameWork 3.5, 兼容模式为 高版本号兼容低版本号: 2. WF和WPF都是基于XAML的,可是两者的用途不同. WF是一种开发框架,将工作流嵌入在. ...
- Vbox视图热键
Vbox屏幕热键 在Vbox中一般host主键会默觉得"右Ctrl",例如以下图所看到的,在选择自己主动调整窗体后,"视图"选项栏会消失.这时若想更改视图设置能 ...
- php连接oracle及简单操作
使你的php支持oracle,按照以下步骤即可: 1.安装php环境,找一下appserv或者xampp,一键安装,很方便 2.把php的ext目录下的php_oci8.dll拷到system32目录 ...
- QUrl不同版本之间的坑
在项目中使用了native application + html的方式构建界面. 之前在4.8.4用QUrl直接加载相对路径一点问题都没有.但是切换到5.1编译之后却发现本地的html文件全部没有加载 ...
- 浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥
概述 首先了解一下相关概念:RSA算法:1977年由Ron Rivest.Adi Shamirh和LenAdleman发明的.RSA就是取自他们三个人的名字. 算法基于一个数论:将两个大素数相乘很ea ...
- perl post 请求带参数
my $url='https://wenjinbao.winfae.com/business/dispatch_post.do?action=submitAdminLogin'; my $res ...
- 基于Greenplum Hadoop分布式平台的大数据解决方案及商业应用案例剖析
随着云计算.大数据迅速发展,亟需用hadoop解决大数据量高并发访问的瓶颈.谷歌.淘宝.百度.京东等底层都应用hadoop.越来越多的企 业急需引入hadoop技术人才.由于掌握Hadoop技术的开发 ...
- webview加载网页加载不出来
1.webView.loadUrl(picTargetUrl); 写在最前面. 1.在无线城市迷你版的项目,用webview去loadUrl的时候出现加载的现象. url 地址是 http://go. ...
- cookie的path和domain參数实例解析
一句话概括两个參数含义各为: path表示cookie所在的文件夹 domain表示的是cookie所在的域,默觉得请求的地址 首先改动我们的 hosts 文件 我本机内网ip 192.168.1.1 ...