
这一题很浅显,就是让求A+B>C,如果符合条件则输出true,反之输出false
按道理说直接模拟即可,但是因为C的范围很大,在-2^63, 到 2^36之间,A和B同样会很大,那么就可能出现A+B溢出,即超出数据类型的范围。
因此我们要考虑溢出的情况:
cpp
else if(A>0&&B>0&&A+B<=0)
{
cout<<"Case #"<<i+1<<": ";
cout<<"true"<<endl;
}
else if(A<0&&B<0&&A+B>=0)
{
cout<<"Case #"<<i+1<<": ";
cout<<"false"<<endl;
}
存在这两种溢出的情况。
那么就可以得出完整代码:
cpp
#include <iostream>
#include <limits.h>
#include <cstring>
#include <queue>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <set>
using namespace std;
long long A;
long long B;
long long C;
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int T;
cin>>T;
for(int i=0;i<T;i++)
{
cin>>A>>B>>C;
long long sum=A+B;
if(A>0&&B>0&&sum<0)
{
cout<<"Case #"<<i+1<<": ";
cout<<"true"<<endl;
}
else if(A<0&&B<0&&sum>=0)
{
cout<<"Case #"<<i+1<<": ";
cout<<"false"<<endl;
}
else if(sum>C)
{
cout<<"Case #"<<i+1<<": ";
cout<<"true"<<endl;
}
else
{
cout<<"Case #"<<i+1<<": ";
cout<<"false"<<endl;
}
}
return 0;
}
这里需要注意一定要先判断溢出,在比较的时候应该先让A+B的值放到一个变量里面,而不是直接:
cpp
A+B<=0
A+B>=0
因为在cpp中会先把B移到右边,再比较,而不是先加减再比较。
因此我们应该用sum=A+B。