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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

运行结果:

猜你喜欢

转载自blog.csdn.net/xr469786706/article/details/87827909
今日推荐