hdu 1713 为什么WA?

#include<stdio.h>intgys(inta,intb){ints,l,r;s=a<b?a:b;//较小的数l=a<b?b:a;//较大的数do//辗转相除法... #include<stdio.h>
int gys(int a,int b)
{
int s,l,r;
s=a<b?a:b;//较小的数
l=a<b?b:a;//较大的数
do//辗转相除法求最大公约数
{
r=l%s;
l=s;
s=r;
}while(r);
return(l);
}
int gbs(int a,int b)
{
int g;
g=gys(a,b);
return a*b/g;
}
void yuefen(int*a,int*b)//分数约分
{
int g;
g=gys(*a,*b);
*a/=g;
*b/=g;
}
void main()
{
int T,t=0,n1,d1,n2,d2,time1,time2;
scanf("%d",&T);
while(t++<T)
{
scanf("%d/%d%d/%d",&n1,&d1,&n2,&d2);
yuefen(&n1,&d1);
yuefen(&n2,&d2);
time1=gbs(n1,n2);
time2=gys(d1,d2);
yuefen(&time1,&time2);
if(time2==1) printf("%d\n",time1);
else printf("%d/%d\n",time1,time2);
}
}
展开
 我来答
转瞬F即逝
2012-10-02
知道答主
回答量:23
采纳率:0%
帮助的人:19.4万
展开全部
这里要用__int64的,用int数据会溢出的。。。
修改后已AC。。。
呵呵。。以后要多注意数据范围的问题。。不然会一直WA的。。加油哈!
#include<stdio.h>
__int64 gys(__int64 a,__int64 b)
{
__int64 s,l,r;
s=a<b?a:b;//较小的数
l=a<b?b:a;//较大的数
do//辗转相除法求最大公约数
{
r=l%s;
l=s;
s=r;
}while(r);
return(l);
}
__int64 gbs(__int64 a,__int64 b)
{
__int64 g;
g=gys(a,b);
return a*b/g;
}
void yuefen(__int64*a,__int64*b)//分数约分
{
__int64 g;
g=gys(*a,*b);
*a/=g;
*b/=g;
}
int main()
{
__int64 T,t=0,n1,d1,n2,d2,time1,time2;
scanf("%I64d",&T);
while(t++<T)
{
scanf("%I64d/%I64d%I64d/%I64d",&n1,&d1,&n2,&d2);
yuefen(&n1,&d1);
yuefen(&n2,&d2);
time1=gbs(n1,n2);
time2=gys(d1,d2);
yuefen(&time1,&time2);
if(time2==1) printf("%I64d\n",time1);
else printf("%I64d/%I64d\n",time1,time2);
}
return 0;
}

噢,对了,还有一个小问题。。main函数最好用int型。。用void有可能会不通过的。。
wenjian881314
2012-10-07
知道答主
回答量:14
采纳率:0%
帮助的人:5万
展开全部
最大公约数写的有问题!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式