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

判断Armstrong数时输出异常:本地运行结果一致,在线编译正常

解决Armstrong数判断代码本地运行结果异常的问题

问题根源是你用了pow函数计算数字的幂,而pow返回的是double浮点数类型,直接加到int类型的sum里会因为浮点数精度问题出错:

  • 比如计算pow(2,3)时,实际返回的可能是7.9999999999而非精确的8,隐式转成int后就变成了7,导致最终的sum计算完全错误。
  • 在线编译器的数学库实现可能刚好让pow的结果更接近整数,所以能正常运行,但本地环境的库没这个“运气”。

修复方案1:用整数运算实现幂计算(最可靠)

完全避开浮点数,手动计算每个数字的幂:

#include <stdio.h>

int main() {
    int originalNum, num, lastDigit, digits, sum;

    printf("Enter any number to check Armstrong number: ");
    scanf("%d", &num);

    sum = 0;
    originalNum = num;

    // 统计数字的位数
    for (digits = 0; originalNum > 0; digits++) {
        originalNum /= 10;
    }

    originalNum = num;

    // 计算各位数字的digits次幂之和
    while (originalNum > 0) {
        lastDigit = originalNum % 10;
        // 手动计算整数幂
        int power = 1;
        for (int i = 0; i < digits; i++) {
            power *= lastDigit;
        }
        sum += power;
        originalNum /= 10;
    }

    if (sum == num) {
        printf("%d is an Armstrong number.\n", num);
    } else {
        printf("%d is not an Armstrong number.\n", num);
    }

    return 0;
}

修复方案2:修正浮点数精度误差

如果不想改太多代码,可以对pow的结果做取整修正,把sum += pow(lastDigit, digits);改成:

sum += (int)(pow(lastDigit, digits) + 0.5);

加0.5后再强制转int,能把7.999999这类接近整数的浮点数修正为正确的8。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:41:07