1065 A+B and C (64bit) (20分)(水)
Posted 57one
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ", i); 26 else if (A < 0 && B < 0 && num >= 0) 27 printf("Case #%d: false ", i); 28 else if(num > C) 29 printf("Case #%d: true ", i); 30 else 31 printf("Case #%d: false ", i); 32 } 33 }
以上是关于1065 A+B and C (64bit) (20分)(水)的主要内容,如果未能解决你的问题,请参考以下文章
[A]1065 A+B and C (64bit)(挖坑待填)
PAT 1065 A+B and C (64bit) (20)