杭电ACM2028,为什么老WA,请高手看下哪错了

#include<stdio.h>#include<math.h>intgcd(intda,intxiao){inttemp;while(xiao!=0){temp=da... #include<stdio.h>
#include<math.h>

int gcd(int da,int xiao)
{
int temp;
while (xiao!=0)
{
temp=da%xiao;
da=xiao;
xiao=temp;
}
return(da);
}

void main()
{
int n,i,a[100],t,m;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf(" %d",&a[i]);
if(i==0)
t=a[i];
}
for(i=1;i<n;i++)
{
if(a[i]>t)
{
m=t;t=a[i];a[i]=m;
}
t=a[i]*t/gcd(t,a[i]);
}
printf("%d\n",t);
}
}
展开
 我来答
boboaaa12345
2011-07-27 · 超过25用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:63.6万
展开全部
那个题中虽然说:“你可以假设最后的输出是一个32位的整数。”
但是在中间相乘的时候,中间结果可能要超过32位,所以你该把数组a[100]定义为__int64 a[100];
下面这个程序是在你程序上改了一点后的程序;已经AC了。。。。
#include<stdio.h>
#include<math.h>

int gcd(int da,int xiao)
{
int temp;
while (xiao!=0)
{
temp=da%xiao;
da=xiao;
xiao=temp;
}
return(da);
}

int main()
{
int n,i,t,m;
__int64 a[100]; //这里定义用__int64
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf(" %I64d",&a[i]);
if(i==0)
t=a[i];
}
for(i=1;i<n;i++)
{
if(a[i]>t)
{
m=t;t=a[i];a[i]=m;
}
t=a[i]*t/gcd(t,a[i]);
}
printf("%d\n",t);
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式