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

C++数列求和函数用long long仍返回负数的问题咨询

数列求和函数溢出问题的分析与解决

问题的核心是整数溢出:你的函数参数n是int类型,计算n*(n+1)时会优先以32位有符号int的规则运算。当n=46341时,n*(n+1)=46341*46342=2147534622,这个值已经超过了32位int的最大值(2147483647),触发溢出后数值变为负数,后续除以2的操作自然得到错误结果。

解决方案

在乘法运算前将n转换为long long类型,让整个计算过程以64位整数执行,避免溢出:

#include <iostream>
using namespace std;

long long seriesSum(int n)
{
    // 先将n转为long long,确保乘法运算在64位环境下进行
    return static_cast<long long>(n) * (n + 1) / 2;
}

int main()
{
    cout << seriesSum(46341); // 正确输出1073767311
    return 0;
}

另一种可选方案

直接将函数参数类型改为long long,从根源上避免int类型的限制:

long long seriesSum(long long n)
{
    return n * (n + 1) / 2;
}

两种方案都能解决问题,前者兼容int类型输入,后者更直观适合处理大范围数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:01:17