当前位置: 代码迷 >> 综合 >> 个人练习-PAT甲级-1065 A+B and C
  详细解决方案

个人练习-PAT甲级-1065 A+B and C

热度:25   发布时间:2023-12-21 11:17:00.0

题目链接https://pintia.cn/problem-sets/994805342720868352/problems/994805406352654336

又摸了两天,做了题感觉懂了就不写了。。

这次题目看起来简单,却发现一直过不了。于是怀疑是字符串处理,还打算写个模拟算法。但写着写着感觉这工作量不小啊但这题也就20分,于是看了柳神的解答。果然还是用到了溢出的性质,毕竟a,b,c的范围都是在long long int范围内的。

完整代码

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<stdio.h>
#include<math.h>
#include<map>
#include<set>
#include<queue>
#include<string.h>using namespace std;int main() {
    int T;scanf("%d", &T);for (int i = 1; i <= T; i++){
    printf("Case #%d: ", i);long long int a, b, c;scanf("%lld %lld %lld", &a, &b, &c);long long int sum = a + b; if (a > 0 && b > 0 && sum < 0)printf("true");else if (a < 0 && b < 0 && sum >= 0)printf("false");else if (sum > c)printf("true");elseprintf("false");if (i != T)printf("\n");}return 0;
}

溢出情况:
(1)当两个数都是正数,和却为负数时,说明溢出了。溢出的数肯定比不溢出的大,为true

        if (a > 0 && b > 0 && sum < 0)printf("true");

(2)当两个数都是负数,和却为正数时,说明溢出了。溢出的数肯定比不溢出的小,为false

        else if (a < 0 && b < 0 && sum >= 0)printf("false");

其余情况正常判断就好。