思路:
首先这一个判断两个数的和是否大于第三个。而且这个A,和B、C的值都是在[-2^63, 2^63],所以这里需要使用Long来存这几个数的值,但是问题还在于,A、B两个数相加的值会超过范围,比如A+B,如果两个都是正数,那么相加后值可能超过Long的范围,然后就变成负数范围[-2^63,-2].所以我们判断如果A>0, B>0, A + B < 0,那么A+ B > C,返回True;
然后如果A + B可能超过范围,两个负的A,B然后相加大于等于0:A+ B > 0(A < 0&&B < 0);这个时候A + B的范围是[0,2^63)次方,这样一来 A < 0 , B < 0 , A + B >=0,此时就返回false;
剩下的情况就很简单了;
实现:
#include<stdio.h> int main(){ int T, tcase = 1; scanf("%d", &T); while(T--){ long long a, b, c; scanf("%lld%lld%lld", &a, &b, &c); long long temp = a + b; bool flag; //注意这里是if else 多个,不能多个if。因为这样会匹配多个,导致最后错误 if(a > 0 && b > 0 && temp < 0){ flag = true; }else if(a < 0 && b < 0 && temp >= 0){ flag = false; }else if(temp > c){ flag = true; }else{ flag = false; } if(flag == true){ printf("Case #%d: true\n", tcase ++); }else{ printf("Case #%d: false\n", tcase ++); } } return 0; }