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

2024-12-02 17:14:58
推荐回答(1个)
回答1:

那个题中虽然说:“你可以假设最后的输出是一个32位的整数。”
但是在中间相乘的时候,中间结果可能要超过32位,所以你该把数组a[100]定义为__int64 a[100];
下面这个程序是在你程序上改了一点后的程序;已经AC了。。。。
#include
#include

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 {
scanf(" %I64d",&a[i]);
if(i==0)
t=a[i];
}
for(i=1;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;
}