题目链接:http://www.patest.cn/contests/pat-a-practise/1065
题目:
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 0Sample Output:
Case #1: false Case #2: true Case #3: false
分析:
原本以为是用高精度整数做的,但是这是__int64能够解决的,加上对于溢出的判定即可。
后来出了问题,问了姥姥。
姥姥的回复:标程是用减法判断的,比如 a<0LL&&b<0LL&&b<(long long)0x8000000000000000LL-a
后来出了问题,问了姥姥。
姥姥的回复:标程是用减法判断的,比如 a<0LL&&b<0LL&&b<(long long)0x8000000000000000LL-a
而后来一直有两个答案是错的,直到我把a+b用sum暂存才解决
AC代码:
#include<stdio.h> //#include <limits.h> //定义各种数据类型最值的常量 bool check(long long a, long long b, long long c){ /* if (a >= 0 && b >= 0) { if (a > LLONG_MAX - b) return true; } else if (a <= 0 && b <= 0) { if (a < LLONG_MIN - b) return false; } *///通过最值来判断 long long sum; sum = a + b; if (a > 0 && b > 0 && sum <= 0) //两个正数相加溢出 return true; else if (a < 0 && b < 0 && sum>= 0)//两个负数相加溢出 return false; else return sum > c; } int main(void){ freopen("F://Temp/input.txt", "r", stdin); int n; scanf("%d", &n); for (int i = 0; i < n; i ++){ long long a, b, c; scanf("%lld%lld%lld", &a, &b, &c); printf("Case #%d: %s\n", i + 1, (check(a, b, c) ? "true" : "false")); } return 0; }
截图:
——Apie陈小旭