题目
Given three integers A, B and C in (−,), you are supposed to tell whether A+B>C.
输入
The first line of the input gives the positive number of test cases, T (≤10). Then T test cases follow, each consists of a single line containing three integers A, B and C, separated by single spaces.
输出
For each test case, output in one line
Case #X: true
if A+B>C, orCase #X: false
otherwise, where X is the case number (starting from 1). Each line should ends with'\n'
.
样例输入
3
1 2 3
2 3 4
9223372036854775807 -9223372036854775808 0
样例输出
Case #1: false
Case #2: true
Case #3: false
题意理解
题意就是给你 A 和 B 两个数 问你是否大于 C
是的话输出 true 否则输出false
这题数很大 到了64次方 最多用long long 可以存下来 但是 A+B可能会溢出
那么我们分类讨论
先来考虑溢出的两种情况
如果A和B都是正数 但是加起来变成了负数 说明了正溢出了那么此时A+B超过了64位 肯定是大于 C的
如果A和B都是负数 但是加起来变成了正数 说明了负溢出了那么此时A+B超过了-64位 肯定是小于C的 因为C最小就是2的64次方-1;
再正常考虑没有溢出的两种情况即可
代码
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
typedef long long LL;
int main(){
int T;
cin>>T;
for(int i=1;i<=T;i++){
LL a,b,c;
scanf("%lld%lld%lld",&a,&b,&c);
// cin>>a>>b>>c;
LL res=a+b;
printf("Case #%d: ",i);
if(a>0&&b>0&&res<0)puts("true");
else if(a<0&&b<0&&res>=0)puts("false");
else if(res>c)puts("true");
else puts("false");
}
return 0;
}