问题:现定义long long a,b,c ,比较a+b与c 的大小关系,原代码如下:
#include<stdio.h>
int main(){
int T,i = 1;
long long a,b,c,res;
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld",&a,&b,&c);
printf("a+b:%lld\n",a + b);
//需要把a+b放入res中再与c比较,否则会出现错误,为什么?
res = a+b;
if(a > 0 && b > 0 && res < 0)
printf("Case #%d: true\n",i);
else if(a < 0 && b < 0 && res >= 0)
printf("Case #%d: false\n",i);
else if(res > c)
printf("Case #%d: true\n",i);
else
printf("Case #%d: false\n",i);
i++;
}
}
要像上面这样写才可以,如果if中的判断条件不用res,而是直接用a+b和c比较,比如写成if( a+b >c)
,在某些情况下判断出错,想请教大家在什么情况下以及为什么会这样?
a + b的和过大时,发生溢出了,这里的long long 就是signed long long,溢出之后,按照long long的位数截断,然后再变成十进制数,就可能出现变成负数的情况啊,然后就出错了吧。