杭电ACM1019题求教 为什么老是wrong answer?? 明明答案是对的啊。。

求最小公倍数InputInputwillconsistofmultipleprobleminstances.Thefirstlineoftheinputwillconta... 求最小公倍数
Input
Input will consist of multiple problem instances. The first line of the input will contain a single integer indicating the number of
problem instances. Each instance will consist of a single line of the form m n1
n2 n3 ... nm where m is the number of integers in the set and n1 ... nm are the
integers. All integers will be positive and lie within the range of a 32-bit
integer.

我的代码是
#include<stdio.h>
int LCM(int a,int b)
{
int t,s;
s=a*b;
if(a<b)
{
t=a;
a=b;
b=t;
}
while(a%b!=0)
{
t=b;
b=a%b;
a=t;
}
return s/b;
}
void main ()
{
int a,b,n1,n2;
scanf("%d",&n1);
while(n1--)
{
scanf("%d",&n2);
scanf("%d",&a);
n2--;
while(n2--)
{
scanf("%d",&b);
a=LCM(a,b);
}
printf("%d\n",a);
}
}
展开
 我来答
283802332
2013-03-13 · TA获得超过3309个赞
知道小有建树答主
回答量:367
采纳率:0%
帮助的人:171万
展开全部
All integers will be positive and lie within the range of a 32-bit
integer.

说明了a和b都是32位的数据

int LCM(int a,int b)
{
int t,s; //s的最大值只可能是(2^31) - 1
s=a*b; //这里可能会溢出,
//因为如果a和b都是 (2^31) - 1这个数值,那么他们两个相乘的话,
//结果会大于2^31 - 1, 一定会溢出, 溢出意味着出错
if(a<b)
{
t=a;
a=b;
b=t;
}

ps:若有不明白的地方,可以追问
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式