题目粗心:

给出三个整数A,B,C,如果A+B>C就输入true,否则输入false;

算法思路:

留神到题目给定的数据范畴,对于A,B,C都只能应用long long类型存储,其范畴为[-2^63,2^63),而此题考查的是溢出问题。

对于正溢出:也就是A+B>=2^63时,因为long long最大为2^63-1,那么A+B最大为2^64-2,对2^64(long long示意的数据范畴长度)取余失去-2,那么正溢出的数字在[-2^63,-2],也就是说,对于A>0,B>0,如果A+B<0就能够断定正溢出

对于负溢出:也就是A+B<-2^63时,因为long long最小值为-2^63,那么A+B最小为-2^64,对2^64(long long示意的数据范畴长度)取余失去0,那么负溢出的数字在[0,2^63),也就是说,对于A<0,B<0,如果A+B>=0就能够断定负溢出。

对于没有溢出的状况,失常判断即可。

留神点:

1、必须得先进行求和而后在判断和C的大小,否则测试点1和2无奈通过
2、对于负溢出,如果没有写等于0的判断条件,测试点2出错。

提交后果:

AC代码:
#include<cstdio>using namespace std;int main(){    int T;    scanf("%d",&T);    long long A,B,C;    for(int i=1;i<=T;++i){        scanf("%lld %lld %lld",&A,&B,&C);        long long sum = A+B;// 测试点1和2         if(A>0&&B>0&&sum<0){            // 正溢出肯定大于C            printf("Case #%d: true\n",i);         }else if(A<0&&B<0&&sum>=0){// 测试点2考查等于0的状况             // 负溢出肯定小于C            printf("Case #%d: false\n",i);         }else{            if(A+B>C){                printf("Case #%d: true\n",i);            }else{                printf("Case #%d: false\n",i);             }        }    }    return 0;}