You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++编程中如何检测int类型整数相加时的溢出问题?

C++ 整数求和溢出检测实现方案

有符号整数溢出属于C++的未定义行为,不能等加法执行完再判断结果,必须在加法操作前做边界校验,具体实现逻辑如下:

  • 首先引入<climits>头文件获取int类型的上下限INT_MAX、INT_MIN
  • 每次执行累加操作前做预判断:
    • 若待加数值为正:如果当前累加和已经大于INT_MAX - 待加数值,相加后必然超出int上限,触发上溢
    • 若待加数值为负:如果当前累加和已经小于INT_MIN - 待加数值,相加后必然低于int下限,触发下溢
  • 检测到溢出后直接输出错误提示,终止计算即可

完整修改后代码

#include <vector>
#include <iostream>
#include <climits> // 新增,用于获取int类型边界
using namespace std;

int main()
{
    int N = 0;
    vector<int> values;
    cout << "请输入你想要求和的数值个数:" << '\n';
    cin >> N;
    cout << "请输入若干整数(输入'|'停止):" << '\n';
    for (int tempnum; cin >> tempnum; )
    {
        values.push_back(tempnum);
    }

    if (N > values.size())
    {
        cout << "错误:你要求求和的数值个数超过了输入的总数量" << '\n';
        return 1;
    }

    int total = 0;
    bool overflow = false;
    for (int i = 0; i < N; i++)
    {
        int val = values[i];
        // 预判断溢出
        if (val > 0 && total > INT_MAX - val) {
            overflow = true;
            break;
        }
        if (val < 0 && total < INT_MIN - val) {
            overflow = true;
            break;
        }
        total += val;
    }

    if (overflow) {
        cout << "错误:求和结果超出int类型可表示的范围" << '\n';
        return 1;
    }

    // 输出符合要求的结果
    cout << "前" << N << "个数字(";
    for (int i = 0; i < N; i++) {
        cout << values[i] << " ";
    }
    cout << ")的和为" << total << "。" << '\n';
    return 0;
}

你可以输入测试用例验证溢出逻辑:比如N输入2,再输入2147483647 2 |,程序会正确触发溢出错误提示。

内容的提问来源于stack exchange,提问作者jaylse2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:45:02