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
题目大意:
给出A、B、C三个数,取值范围为[-2^63, 2^63] 判断AB的和是否比C大。
AB相加可能会超出longlong的取值范围[-2^63, 2^63-1],需要考虑数据越界。 A>0,B>0,越界时 AB和取值范围为[-2^63, -2]。
(两个2^63-1相加为-2)。
A<0,B<0,越界时AB和的取值范围为[0,2^63]。 先考虑数据是否越界之后,再判断不越界的情况。
代码如下:
#include
int main()
{
int T;
long long A, B, C;
long long res;
bool flag; //引入变量flag 去判断A+B是否大于C;
scanf ("%d", &T);
for (int i = 1; i <= T; i++)
{
scanf ("%lld%lld%lld", &A, &B, &C);
res = A + B;
if (A > 0 && B > 0 && res < 0) flag = true; //正溢出;
else if (A < 0 && B < 0 && res >= 0) flag = false; //负溢出;
else if (res > C) flag = true;
else flag = false;
if (flag == true) //根据flag的值进行输出;
printf ("Case #%d: true\n", i);
else
printf ("Case #%d: false\n", i);
}
return 0;
}