pat 甲级 1065. A+B and C (64bit) (20)

1065. A+B and C (64bit) (20)

时间限制
100 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
HOU, Qiming

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都大于0,a+b溢出就一定会比大,同样a,b小于0且a+b溢出一定比c小。

AC代码:

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<set>
#include<queue>
#include<map>
using namespace std;
#define INF 0x3f3f3f
#define N_MAX 1000+5
#define M_MAX 2001
typedef long long ll;
ll a, b, c;
int main() {
    int t; cin >> t; int Case=0;
    while (t--) {
        Case++;
        cin >> a >> b >> c;
        ll res = a + b;
        if (a > 0 && b > 0 && res <= 0) {//!!!溢出一定比c大
            printf("Case #%d: true
", Case); continue;
        }
        else if (a < 0 && b < 0 && res>=0) {//!!溢出
            printf("Case #%d: false
", Case); continue;
        }
        else {
            if (res > c) printf("Case #%d: true
", Case);
            else printf("Case #%d: false
", Case);
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/ZefengYao/p/8544282.html