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

C++浮点数异常问题求助:提取数字代码报错,求修正

修正提取数字各位的C++代码并解决浮点数异常问题

嘿,我来帮你排查代码里的问题,顺便修正它~

首先,你的代码出现Floating Point Exception的核心原因是:循环没有合理的终止条件,导致变量p不断被乘以10,最终超出了int类型的取值范围发生溢出。当p溢出后可能变成0(或者无效的负数),这时候执行110 % p就会触发模0的未定义行为,很多系统会抛出浮点数异常来提示这个错误。

另外,你的代码逻辑还有个小问题:当前用110 % p得到的不是单独的各位数字,而是包含低位的组合值(比如p=100时,110%100=10,这是十位+个位的结果,不是单独的十位数字)。

修正方案1:顺着你的思路调整(保留p的乘法逻辑)

我们给循环加一个合理的终止条件,并且正确计算每一位数字:

#include <iostream>
using namespace std;

int main() {
    int num = 110; // 把目标数字单独存起来,方便复用
    int p = 10;
    
    // 先提取个位
    cout << num % p << endl;
    
    // 循环提取更高位,直到p的10倍超过num为止
    while (p <= num / 10) {
        // 计算当前位的数字:先取到当前位及低位的余数,再除以p得到单独的一位
        int digit = (num % (p * 10)) / p;
        cout << digit << endl;
        p *= 10;
    }
    return 0;
}

这段代码会依次输出0(个位)、1(十位)、1(百位),完美提取各位数字。

修正方案2:更简洁的常见写法

如果不想用p的乘法逻辑,还有一种更直观的方式:每次提取当前数字的个位,然后把数字除以10去掉个位,直到数字变为0:

#include <iostream>
using namespace std;

int main() {
    int num = 110;
    while (num > 0) {
        cout << num % 10 << endl; // 输出当前个位
        num = num / 10; // 去掉已输出的个位
    }
    return 0;
}

这段代码同样会输出0、1、1,逻辑更简洁易懂,也不会出现溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:41:05