PAT 1001 A B C 问题

本文介绍了一种在C++中处理整数溢出的方法,尤其关注于当两个整数a和b同号相加时可能出现的溢出问题。通过逻辑判断,避免了直接进行加法运算可能导致的溢出,并提供了两种有效的解决策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>

using namespace std;

int ABandC(int a, int b, int c)
{
    bool samble_a = (a > 0);
    bool samble_b = (b > 0);
    bool samble_c = (c >= 0);

    if (samble_a != samble_b)
    {
        return (( a+b ) > c );
    } else {
        if (samble_b == samble_c) {
            return ( a > (c - b) );
        } else {
            return (a > c);
        }
    }
}
int main()
{
    int idx;
    int result[10];
    int testgrp = 0;
    int a,b,c;
    cin >> testgrp;
    idx = 0;
    while (idx < testgrp) {
        cin >> a >> b >> c;
        result[idx++] = ABandC(a,b,c);
    }
    idx = 0;
    while (idx < testgrp)
    {
        if (result[idx++]) {
            cout << "Case #" << idx << ": true" << endl;
        } else {
            cout << "Case #" << idx << ": false" << endl;
        }
    }

}
根据网友思想解决问题:

关键是处理溢出问题,溢出情况有:
a和b都是正数,a+b  >= 2^32;
a和b都是负数,a+b  <= -2^32;
因此溢出只出现在a b 同号,a b异号的话直接按 (a+b) > c 来算就可以。

对于a b同号,也有两种处理方法:
1.  b c 同号, 将 (a+b) > c 转换成 a > (c - b), 此时 (c - b)必定不会出现溢出;
1.  b c 异号, 由于式子左边同号,相加后符号不变,式子右边跟左边异号,因此不需要计算即可知道大小关系。

网上大部分说法是定义long long防止溢出,但是如果题目 A B C的范围变为long long 该如何定义呢?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值