杭电ACM 1019 我哪出错了

来源:百度知道 编辑:UC知道 时间:2024/05/31 14:29:35
#include <stdio.h>
int mingbs(int a,int b)
{
long int r,x=a,y=b;
while(1)
{
r=a%b;
if(r==0)
break;
else
{
a=b;
b=r;
}
}
return x*y/b;
}
int main()
{
long int n,i,j,a[1000],s,q;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&s);
for(j=0;j<s;j++)
scanf("%d",&a[j]);
q=mingbs(a[0],a[1]);
for(j=1;j<s-1;j++)
q=mingbs(q,a[j+1]);
printf("%d\n",q);
}
return 0;
}
我不要代码...我想要知道我错哪了

有两处错误
第一处:当s等于1的时候,要单独处理。
第二处:运算过程中数值超出了int,需要用__int64.
附上修改你的代码之后的AC代码
#include <stdio.h>
__int64 mingbs(__int64 a,__int64 b)
{
__int64 r,x=a,y=b;
while(1)
{
r=a%b;
if(r==0)
break;
else
{
a=b;
b=r;
}
}
return x*y/b;
}
int main()
{
__int64 n,i,j,a[1000],s,q;
scanf("%I64d",&n);
for(i=0;i<n;i++)
{
scanf("%I64d",&s);
for(j=0;j<s;j++)
scanf("%I64d",&a[j]);
if(s == 1)
{
q = a[0];
}
else
{
q=mingbs(a[0],a[1]);
for(j=1;j<s-1;j++)
q=mingbs(q,a[j+1]);
}
printf("%I64d\n",q);
}