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

CS50信用卡问题:int转long后数字隔位求和结果异常求助

问题分析与解决:CS50信用卡隔位求和异常

核心问题

你遇到的异常是因为**sum变量未进行初始化**。在C++中,局部变量如果不显式赋值,会保留内存中的随机垃圾值:

  • 使用int类型时,栈中sum的初始值碰巧是0,所以累加后结果正确;
  • 改为long类型时,sum的初始垃圾值极大,最终累加结果就出现了异常的大数值。

修正方法

只需要显式将sum初始化为0即可,修改后的代码如下:

#include <iostream>
using namespace std;

int main() {
    long num = 123456789;
    long sum = 0, last, second; // 显式初始化sum为0
    while (num>0)
    {
        last = num/10;
        second = last%10;
        num /=10;
        cout<<second<<endl;
        
        sum += second;
        num /=10;
    }
    cout<<"sum: "<<sum<<endl;

    return 0;
}

修正后输出

8
6
4
2
0
sum: 20

额外优化建议(可选)

原代码的取数逻辑可以更简洁,直接通过标记控制是否累加数字,避免多余变量:

#include <iostream>
using namespace std;

int main() {
    long num = 123456789;
    long sum = 0;
    bool skip = true; // 从最后一位开始,先跳过第一位
    while (num > 0) {
        int digit = num % 10;
        num /= 10;
        if (!skip) {
            sum += digit;
        }
        skip = !skip;
    }
    cout << "sum: " << sum << endl;
    return 0;
}

这段代码逻辑更清晰,同样能得到正确结果20。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 09:12:36