由于整数区间位于[-2^63,2^63],使用long long将两个整数相加可能发生溢出(正溢出或负溢出),所以直接进行比较可能会发生错误。
当发生正溢出时,A>0,B>0,A+B<0,结果应该为true。
当发生负溢出时,A<0,B<0,A+B>=0((-2^64)%2^64=0),结果应该为false。
#include <stdio.h>
int main(){
long long A,B,C;
long long sum=0;
int N,count=0;
bool flag=false;
scanf("%d",&N);
for(int i=0;i<N;i++){
count++;
scanf("%lld%lld%lld",&A,&B,&C);
sum=A+B;
if(A>0&&B>0&&sum<0) flag=true;
else if(A<0&&B<0&&sum>=0) flag=false;
else if(sum>C) flag=true;
else flag=false;
if(flag==true){
printf("Case #%d: true\n",count);
}
else
printf("Case #%d: false\n",count);
}
return 0;
}