[PAT解题报告] A+B and C

简单题,给定A, B, C,判断是否有A + B > C。 这3个数都是64-bit整数,所以要用long long。但是加法可能溢出……
clmits头文件包含了 
 LLONG_MAX和LLONG_MIN
我们其实要判断
(1) A + B >  LLONG_MAX, 即 A >  LLONG_MAX - B, 注意B可能是负数,这样 LLONG_MAX - B也越界了,而且只有B是非负数,它与A的和才可能上溢出,所以我们判断(B >= 0) && ( A >   LLONG_MAX - B) 这时A + B >  LLONG_MAX了,肯定超过C了,根本不用看C。
(2) 类似的当B <= 0时 (其实A也要<= 0),A + B可能小于 LLONG_MIN, 于是判断 A <  LLONG_MIN - B , 等号右边虽然是减法,但得到的值比 LLONG_MIN大……这样A + B <  LLONG_MIN了,肯定不C小,根本不用看C

如果不在这两种情况,A + B是“正常”的,不会上下溢出。
直接求和判断就好了……

#include <cstdio> 
#include <cstring> 
#include <string> 
#include <climits> 

using namespace std; 

bool make(long long a, long long b, long long c) { 
    if ((b >= 0) && (a > LLONG_MAX - b)) {
        return true; 
    }
    if ((b <= 0) && (a < LLONG_MIN - b)) {
        return false; 
    }
    return a + b > c;
}

int main() {
int n;
    scanf("%d",&n);
    for (int i = 1; i <= n; ++i) {
        long long a,b,c;
        scanf("%lld%lld%lld",&a,&b,&c);
        printf("Case #%d: %s\n",i, make(a, b, c)?"true":"false");
    }
    return 0; 
}

原题链接 : http://www.patest.cn/contests/pat-a-practise/1065
全部评论
其实用double类型什么都解决了
点赞 回复 分享
发布于 2016-05-13 10:25
可不可以用c减去a,b中的最大数与其中的最小数相比呢
点赞 回复 分享
发布于 2016-05-12 22:37

相关推荐

07-02 13:52
门头沟学院 Java
点赞 评论 收藏
分享
人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
程序员饺子:正常 我沟通了200多个 15个要简历 面试2个 全投的成都的小厂。很多看我是27直接不会了😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务