题目粗心:
给出三个整数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;}