给定区间 [−231,231-2^{31},2^{31}−231,231] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。
输入格式:
输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。
输出格式:
对每组测试用例,在一行中输出 Case #X: true 如果 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
代码
#include <stdio.h>
#include <iostream>
using namespace std;
bool Func(int a, int b, int c) // 比较算法
{
// 考虑两种情况:同号、异号
// 同号的话需要考虑溢出,所以可以用(a+b)/2和c/2来代替
// 异号的话相加不可能溢出,所以直接正常计算即可
if (a > 0 && b > 0) // 这里可以用a*b>0代替,但是乘法浪费时间,本着节约精神你懂的
{
if (a / 2.0 + b / 2.0 > c / 2.0) // .0不能少,用浮点数比较保证正确
{
return true;
}
else
{
return false;
}
}
if (a < 0 && b < 0)
{
if (a / 2.0 + b / 2.0 > c / 2.0)
{
return true;
}
else
{
return false;
}
}
if (a + b > c)
{
return true;
}
else
{
return false;
}
return true;
}
int main()
{
int count, A, B, C;
bool J[10];
cin >> count;
for (int i = 0; i < count; i++)
{
cin >> A >> B >> C;
J[i] = Func(A, B, C);
}
for (int i = 1; i <= count; i++)
{
if (J[i])
{
cout << "Case #" << i << ": true" << endl;
}
else
{
cout << "Case #" << i << ": false" << endl;
}
}
return 0;
}