您的位置:首页 > 其它

hdu 1019 Least Common Multiple

2016-07-11 14:41 375 查看
WA了好几发,原因是越界。

原来的处理方法是用long long避免越界,思路是对的,但在处理过程中出现了小差错。

例子:

int a,b;
long long chengji;
chengji=a*b;


这种写法是错的,因为在右边两个int相乘时就越界了。

正确写法是

int a,b;
long long chengji;
chengji=(long long)a*(long long)b;


或者也可以C语言点滴上介绍的简单防止溢出的方法:

int a,b,gcd,lcm;
lcm=a/gcd*b;


下面贴代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int gcd(int x,int y)
{
if(y==0)
return x;
else
return(gcd(y,x%y));
}
int lcm(int x,int y)
{
long long chengji;
chengji=(long long)x*(long long)y;
return(int)(chengji/gcd(x,y));
}
int main(void)
{
int m,n,x,ans=1;
scanf("%d",&m);
for(int i=0;i<m;i++)
{
ans=1;
scanf("%d",&n);
if(n==0)
continue;
while(n--)
{
scanf("%d",&x);
ans=lcm(ans,x);
}
if(i!=0)
printf("%d\n",ans);
else
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: