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

C++使用int存储大数求末位输出总为5或7的问题

问题原因

你代码中使用的int类型在绝大多数主流操作系统中占4字节,有符号int的取值范围为 -2147483648 ~ 2147483647,最多只能存储10位的整数。你输入的数字比如645177858745、8698184618951都远超过这个范围,会触发整数溢出,属于C++标准中的未定义行为。
此时cin读入操作会失败,变量a中存储的已经不是你输入的原始数值,常见实现中会被赋值为int的最大值2147483647(模10结果为7),或者发生二进制截断后得到的数值模10为5,这就是你输出总是7或5的原因。

修复方案
  • 方案1:改用范围更大的整数类型
    将int替换为long long,8字节的long long取值范围为 -9223372036854775808 ~ 9223372036854775807,最多支持18位整数输入,可满足绝大多数常规场景需求,修改后代码如下:
#include <iostream>
using namespace std;

int main()
{
    long long a;
    cout << "Enter a number: ";
    cin >> a;
    a = a % 10;
    cout << "Last Number is " << a;
    return 0;
}
  • 方案2:用字符串处理超长数字
    如果需要处理超过18位的超大数字,直接将输入作为字符串读取,取最后一位字符转换为数字即可,完全规避整数溢出问题:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string num_str;
    cout << "Enter a number: ";
    cin >> num_str;
    int last_num = num_str.back() - '0';
    cout << "Last Number is " << last_num;
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:04