按a1/b1 a2/b2格式输入分数,已经知道 四个数都是正整数并比较分数大小。用a1*b2-a2*b1的正负号进行判断一直有个例子不能过。改来改去,试用了“re=1.0*a1/b1-1.0*a2/b2;”的符号判断,就过了,不知道这两个式子为什么会不一个样?可以解释一下原因吗?或者举个例子也可以。
#include <stdio.h>
int main() {
int re,T,a1,b1,a2,b2;
char op;
printf("T = ");//T待测实例数
scanf("%d",&T);
while(T--) {
scanf("%d%d%d%d",&a1,&b1,&a2,&b2);
re = a1*b2 - a2*b1;//全部都是整数,运算结果必然是整型数
if(re > 0) op = '>';
else if(re < 0) op = '<';
else op = '=';
printf("%d/%d %c %d/%d\n",a1,b1,op,a2,b2);
}
printf("\n");
return 0;
}
追问不是,这个问题主要是用a1*b2-a2*b1判断,有一个测试例子失败了。而用1.0*a1/b1-1.0*a2/b2判断就全部通过了。网站自动测试的,我不知道测试用例。就想来问问,这个两个方法有什么不同?什么测试用例,会让用a1*b2-a2*b1判断会出错。我自己也试了很久,用循环结构,也穷举了从1到300000的数,两个方法的答案都一样。😫还是不知道这两个方法有什么区别?
我也不知道。/(ㄒoㄒ)/~~那是线上的题,网站会有5个例子进行测试。但那是网站自动测试的。我只能知道测试结果。所以,我希望能有个例子也好。
本回答被网友采纳