奋战杭电ACM(DAY12)1019
2013-09-04 23:02
211 查看
这道题不难,但是很考验基本功。我基本功不扎实,所以还是栽了跟头……
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/knock.gif)
一开始用大数翻倍法求LCM,结果很显然……TLE……
后来改进了,用GCD求LCM,但是循环时漏了递减计数,一直死循环……还是TLE……
后来好不容易改过来了,结果……WA了……
忘了32-bit下溢出问题……求解最小公倍数时,先乘后除,乘法明显可能溢出……
然后是数组大小,没有考虑大小为1 的情况,下标可能越界……
总而言之,这水题还是暴露了我很多细节问题,以后一定要注意!
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/struggle.gif)
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/knock.gif)
一开始用大数翻倍法求LCM,结果很显然……TLE……
后来改进了,用GCD求LCM,但是循环时漏了递减计数,一直死循环……还是TLE……
后来好不容易改过来了,结果……WA了……
忘了32-bit下溢出问题……求解最小公倍数时,先乘后除,乘法明显可能溢出……
然后是数组大小,没有考虑大小为1 的情况,下标可能越界……
总而言之,这水题还是暴露了我很多细节问题,以后一定要注意!
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/struggle.gif)
Least Common Multiple
#include <iostream> using namespace std; int gcd(int a ,int b) { int temp; if(a<b) { temp=a; a=b; b=temp; } if(a%b==0) return b; else return gcd(a%b,b); } int lcm(int a, int b) { return a/gcd(a,b)*b;//原来写a*b/gcd(a,b),一直WA……因a*b可能会溢出…… } int main() { int n,m,LCM; cin >> n; while(n>=1) { cin >> m; int *p= new int[m]; for(int i=0; i<m; i++) cin >> p[i]; LCM=p[0]; if(m>1)//可能只有一个数…… { for(i=1; i<m; i++) LCM=lcm(LCM,p[i]);} cout << LCM << endl; n--;//一开始忘了……TLE…… } return 0; }
相关文章推荐
- 奋战杭电ACM(DAY12)1018
- 奋战杭电ACM(DAY3)1004
- 奋战杭电ACM(DAY11)1017
- 奋战杭电ACM(DAY11)1017
- 奋战杭电ACM(DAY14)1022
- 奋战杭电ACM(DAY10)1015
- 奋战杭电ACM(DAY1)
- 奋战杭电ACM(DAY10)1015
- 杭电acm--1019
- 奋战杭电ACM(DAY5)1012
- 杭电acm1019 hdu-acm-101解题报告
- 奋战杭电ACM(DAY5)1012
- 杭电ACM 1017 1018 1019
- 奋战杭电ACM(DAY2)1003
- 奋战杭电ACM(DAY5)1007
- 奋战杭电ACM(DAY6)1010
- 奋战杭电ACM(DAY15)1034
- 杭电acm 1019 Least Common Multiple
- 奋战杭电ACM(DAY13)1021
- 奋战杭电ACM(DAY11)1016