1065 A+B and C (64bit) (20分)(水)

Given three integers A, B and C in [−], 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 (≤). 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

题目分析:利用long long 存储数据 但是要注意对于num的判断 因为long long 最大存储范围是从负2的63次 到 正2的63次减一
如果这个和大于或小于这个范围 就要先判断再输出
对于这道题来说
数的范围是 $[-2^63,2^63]$ 而longlong的范围是$[-2^63,2^63-1]$
若两个数的和过大到区间$[2^63,2^64-2] 那么会溢出改变到区间 [-2^63,-2](对于非浮点数来说上界加一会变为加一后的值取负 故(2^63-1+1)会变为-2^63 -2是根据公式 (2^64-2)%2^64=-2求得$
同理 若过小到区间$[-2^64,-2^63-1] 会溢出改变到区间[0,2^63-1]$

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <climits>
 3 #include<iostream>
 4 #include<vector>
 5 #include<queue>
 6 #include<map>
 7 #include<set>
 8 #include<stack>
 9 #include<algorithm>
10 #include<string>
11 #include<cmath>
12 using namespace std;
13 string A, B, C;
14 
15 int main()
16 {
17     int N;
18     cin >> N;
19     for (int i = 1; i <= N; i++)
20     {
21         long long A, B, C;
22         cin >> A >> B >> C;
23         long long num = A + B;
24         if (A > 0 && B > 0 && num < 0)
25             printf("Case #%d: true\n", i);
26         else if (A < 0 && B < 0 && num >= 0)
27             printf("Case #%d: false\n", i);
28         else if(num > C)
29             printf("Case #%d: true\n", i);
30         else
31             printf("Case #%d: false\n", i);
32     }
33 }
View Code

猜你喜欢

转载自www.cnblogs.com/57one/p/12067988.html