题目链接: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陈小旭