题目: https://www.patest.cn/contests/pat-a-practise/1065
如果用大数运算会麻烦许多吧!
关于数值范围
题目中的范围为[-2^63, 2^63],应该是给错了,改为[-2^63, 2^63);不然long long存储2^63会自动变成-2^63,这时候只能用带负数的大数运算了。测试数据确实也没有A或B等于2^63的情况。
#include<cstdio>
#include<iostream>
using namespace std;
int main() {
int n;
long long a, b, c;
scanf("%d", &n);
/*
//范围[-2^63, 2^63), long long 8字节=64bit
// 溢出判断
// a > 0, b > 0, c > 0; a + b < 0, 输出 true
溢出后的区间 为 [-2^63, -2]
// a < 0, b < 0, c < 0; a + b < 0, 输出 false
移除后的区间 为 [0, 2^63)
*/
int flag;
for (int i = 0; i < n; i++) {
scanf("%lld%lld%lld", &a, &b, &c);
long long temp = a + b;
if (a > 0 && b > 0 && temp < 0) flag = 1;
else if (a < 0 && b < 0 && temp >= 0) flag = 0;
else if (temp > c) flag = 1;
else flag = 0;
//输出
if (flag == 1) printf("Case #%d: true\n", i + 1);
else printf("Case #%d: false\n", i + 1);
}
system("pause");
return 0;
}