由於整數區間位於[-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;
}