题目链接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");
其余情况正常判断就好。