A1065. 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、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; 
} 



你可能感兴趣的:(PAT,A)