Fork me on GitHub

PAT(甲级)渡劫(二十三)-A+B and C (64bit) (20)


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的(注意这里是>=,而不是>,否则有样例过不了)。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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;
}

运行结果:

坚持原创技术分享,您的支持将鼓励我继续创作
-------------本文结束感谢您的阅读-------------
0%