版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xr469786706/article/details/87827909
PAT(甲级)渡劫(二十三)-A+B and C (64bit) (20)
算法思想:
因为A、B、C的大小为[-2^63, 2^63],用long long 存储他们的值和sum。
接下来就是分类讨论:
如果A > 0, B < 0 或者 A < 0, B > 0,sum不会溢出,直接和C判断比较即可。
如果A > 0, B > 0,sum可能会溢出, 溢出的话为负数,所以sum < 0时候说明溢出了,那么肯定是大于C的。
如果A < 0, B < 0,sum可能会溢出,同理,sum >=0即为溢出,那么肯定是小于C的(注意这里是>=,而不是>,否则有样例过不了)。
代码如下:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
freopen("in.txt","r",stdin);
long long a,b,c;
int n,i,tag = 0;
scanf("%d",&n);
for(int i = 0 ; i < n ; i++){
scanf("%lld%lld%lld",&a,&b,&c);
long long ans = a+b;
if(a > 0 && b > 0 && ans <= 0) tag = 1;
else if(a < 0 && b < 0 && ans >= 0) tag = 0;
else tag = (ans > c);
if(tag) printf("Case #%d: true\n",i+1);
else printf("Case #%d: false\n",i+1);
}
return 0;
}