HDOJ 1019 水题

来源:互联网 发布:盖世豪侠 知乎 编辑:程序博客网 时间:2024/06/05 00:35
这个题是水题没有疑问。但是这个题目也给我提醒了。a,b都是32整形没错。但是a*b存在溢出的情况。所以在a*b/gcd的画就会出错,但是改写成a/gcd*b就可以AC,在以后不管是学习还是写题的过程中都要注意这样的情况。考虑到溢出的问题,正确的运用好乘除法的顺序。
#include <iostream>#include <math.h>using namespace std ;int gcd(int a,int b){    if (a>b)    return b==0?a:gcd(b,a%b);    else     return a==0?b:gcd(a,b%a);}int main(){    int n;    cin>>n;    while(n--){        int m;        cin>>m;        int ans,ch;        for(int i = 1 ; i <= m ; i++){            if(i==1) cin>>ans;            else{                cin >> ch;                int g = gcd(ans,ch);                ans = ans/g*ch;            }        }        cout << ans << endl;    }    return 0;}