You need to enable JavaScript to run this app. C++实现的阿姆斯特朗数程序始终输出false如何解决
优惠活动
大模型
产品
解决方案
定价
更多

C++实现的阿姆斯特朗数程序始终输出false如何解决

问题原因分析
  • 变量count声明时未初始化,作为局部int变量其初始值是内存中的随机垃圾值,导致计算数字位数的结果完全错误。
  • 第二个while循环内部重复声明了同名变量int num,该变量属于循环内的局部变量,会屏蔽外层存储用户输入的num,且这个内层num没有初始化,值为随机垃圾值,后续取余、幂计算、除以10的操作全部基于垃圾值执行,逻辑完全错误。
  • 即便删除内层重复的num声明,第二个循环会不断将外层的num除以10,循环结束后外层num的值已经变为0,最后的判断条件sum == num实际是拿计算得到的幂和与0比较,自然永远不会等于用户最初输入的数值,只会输出false。你一开始已经把原始输入值备份到了temp变量,最终判断应该对比sum和原始输入值才对。
修正后的代码
#include<iostream>
#include<math.h>
using namespace std;
int main() {
    int num, count = 0, original, sum = 0, powr, rem;
    cin >> num;
    original = num;
    // 计算数字位数
    int temp = num;
    while(temp > 0) {
        ++count;
        temp = temp / 10;
    }
    // 计算各位幂次和
    while(num > 0) {
        rem = num % 10;
        powr = round(pow(rem, count));
        sum += powr;
        num = num / 10;
    }
    // 和原始输入值对比
    if(sum == original) {
        cout << "true";
    } else {
        cout << "false";
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:00:04