分析:
主要就是可能会溢出的问题,还有就是a+b只有赋值后才可以检测是否溢出。
溢出只可能发生在两正数相加或者两负数相加时,所以把这两种溢出时的特殊情况拿出来单独考虑就可以了,其他情况是可以直接a+b的
因为A、B的大小为[-2^63, 2^63],用long long 存储A和B的值,以及他们相加的值sum:
如果A > 0, B < 0 或者 A < 0, B > 0,sum是不可能溢出的
如果A > 0, B > 0,sum可能会溢出,sum范围理应为(0, 2^64 – 2],溢出得到的结果应该是[-2^63, -2]是个负数,所以sum < 0时候说明溢出了
如果A < 0, B < 0,sum可能会溢出,同理,sum溢出后结果是大于0的,所以sum > 0 说明溢出了
#include<bits/stdc++.h>
using namespace std;
int main(){
int T;
cin>>T;
for(int i=1;i<=T;i++){
long long a,b,c,sum;
scanf("%lld %lld %lld",&a,&b,&c);
sum=a+b;
if(a>0 && b>0 && sum<0) printf("Case #%d: true\n",i);
else if(a<0&&b<0&&sum>=0) printf("Case #%d: false\n",i);
else if(sum>c)printf("Case #%d: true\n",i);
else printf("Case #%d: false\n",i);
}
return 0;
}