PAT1011
题目描述:
给定区间 [ − 2 31 , 2 31 ] [-2^{31}, 2^{31}] [−231,231]内的3个整数 A 、 B A、B A、B和 C C C,请判断 A + B A + B A+B是否大于 C C C。
输入格式:
输入第 1 行给出正整数 T ( ≤ 10 ) T(≤10) T(≤10),是测试用例的个数。随后给出 T T T组测试用例,每组占一行,顺序给出 A 、 B A、B A、B和 C C C。整数间以空格分隔。
输出格式:
对每组测试用例,在一行中输出Case #X: true
如果
A
+
B
>
C
A+B>C
A+B>C,否则输出Case #X: false
,其中X
是是测试用例的编号(从 1 开始)。
输入样例:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出样例:
Case #1: false
Case #2: true
Case #3: true
Case #4: false
算法思路与代码实现:
Python实现
Python语言不必考虑整数之和溢出的问题,比较简单,直接判断并输出即可。
n = int(input())
for i in range(n):
a, b, c = map(int, input().split())
print('Case #{0}: {1}'.format(i + 1, 'true' if a + b > c else 'false'))
C++实现
可以选择使用long long int
或者直接用int
,使用long long int
不需判断溢出问题,使用普通int
类型则需要判断是否溢出。两种情况都不是特别复杂。
使用long long int
:
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
long long int a, b, c;
cin >> a >> b >> c;
cout << "Case #" << i + 1 << ": " << boolalpha << (a + b > c) << endl;
}
return 0;
}
使用int
:
#include <iostream>
using namespace std;
int main() {
int n, a, b, c;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a >> b >> c;
if (a + b < 0 && a > 0 && b > 0)
cout << "Case #" << i + 1 << ": " << "true" << endl;
else if (a + b >= 0 && a < 0 && b < 0)
cout << "Case #" << i + 1 << ": " << "false" << endl;
else
cout << "Case #" << i + 1 << ": " << boolalpha << (a + b > c) << endl;
}
return 0;
}
总结:
本题意在考查各类型所能表示数字的范围以及整数溢出问题,需要注意sizeof(int) <= sizeof(long int)
。int
类型所能表示的整数范围是
[
−
2147483648
,
2147483647
]
[-2147483648, 2147483647]
[−2147483648,2147483647],基于此可以运用不同的方法加以解决。