1065. A+B and C (64bit) (20)
Given three integers A, B and C in [-263, 263], you are supposed to tell whether A+B > C.
Input Specification:
The first line of the input gives the positive number of test cases, T (<=10). Then T test cases follow, each consists of a single line containing three integers A, B and C, separated by single spaces.
Output Specification:
For each test case, output in one line “Case #X: true” if A+B>C, or “Case #X: false” otherwise, where X is the case number (starting from 1).
Sample Input: 3 1 2 3 2 3 4 9223372036854775807 -9223372036854775808 0 Sample Output: Case #1: false Case #2: true Case #3: false
直接a+b无法处理的情况就是这个值溢出了。所以单独对这个值正数方向溢出和负数方向溢出进行讨论。要注意的是这里溢出时a+b必须要进行赋值。代码是直接在妹子的代码基础上改的,所以C和C++交互,风格迥异,能看就行。
此外需要一提的是在ACM竞赛中能带纸质材料,所以邝斌大神的模板中就有大整数的处理,并且封装成了类。如果采用C++写代码,平时可以考虑抄。
#include<stdio.h> #include<iostream> using namespace std; int main() { long long a, b, c; int n,i; scanf("%d", &n); long long d; for (i = 0; i < n; ++i) { //scanf("%lld%lld%lld", &a, &b, &c); cin >> a >> b >> c; d = a + b; //a+bメ邉・ if (a<0&&b<0&&d>=0) { PRintf("Case #%d: false\n", i + 1); } else if(a>0&&b>0&&d<=0) //a+bメ邉・ { printf("Case #%d: true\n", i + 1); } //printf("Case #%d: true\n", i + 1); else { if (a + b > c) printf("Case #%d: true\n", i + 1); else printf("Case #%d: false\n", i + 1); } } return 0; }