题目
给定区间 [ − 2 31 , 2 31 ] [−2^{31},2^{31}] [−231,231] 内的 3 个整数 A A A、 B B B 和 C C C,请判断 A + B A+B A+B 是否大于 C C C。
输入格式:
输入第 1 行给出正整数 T ( ≤ 10 ) T (≤10) T(≤10),是测试用例的个数。随后给出 T T T 组测试用例,每组占一行,顺序给出 A A A、 B B B 和 C C C。整数间以空格分隔。
输出格式:
对每组测试用例,在一行中输出 Case #X: true
如果
A
+
B
>
C
A+B>C
A+B>C,否则输出 Case #X: false
,其中 X
是测试用例的编号(从
1
1
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
思路(2020-4-12 00:53:40)
- 15分完全白给。本来看到这个题,我第一反应是要把大数加法拿出来了。结果一看,给定区间 [ − 2 31 , 2 31 ] [−2^{31},2^{31}] [−231,231],double都有8个字节64位了,难道还有个什么反码补码卡我之类的?
- double在小数可能不是精确的,会被近似成 2 k 2^k 2k,小数部分 k k k小于0。但是在整数部分,存储是类似 a 1 × 2 0 + a 2 × 2 1 + a 3 × 2 2 + ⋅ ⋅ ⋅ + a 64 × 2 63 {a_1} \times {2^0} + {a_2} \times {2^1} + {a_3} \times {2^2}{\rm{ + }} \cdot \cdot \cdot {\rm{ + }}{a_{64}} \times {2^{63}} a1×20+a2×21+a3×22+⋅⋅⋅+a64×263,是精确的。
- 计组学太久,记不牢,坐等dalao出来指正。
- 直接判断输出。
答案1(2020-4-12 01:04:50)
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
double a,b,c;
for (int i = 1 ; i <= n ; i++)
{
cin >> a >> b >> c;
if(a + b > c)
{
cout << "Case #" << i << ": true";
}
else
{
cout << "Case #" << i << ": false";
}
cout << endl;
}
return 0;
}