C++ 中的 Armstrong 数字程序无法打印正确的输出

Armstrong number program in C++ does not print the correct output

#include<iostream>
#include<math.h>
using namespace std;
int main() {
    int num,count,temp,sum=0,powr,rem;
    cin>>num;
    temp=num;
    while(temp>0){
        ++count;
        temp=temp/10;
    }
    while(num>0){
        int num;
        rem=num%10;
        powr=round(pow(rem,count));
        sum+=powr;
        num=num/10;
    }
    if(sum==num){cout<<"true";}
    else
    cout<<"false";

    return 0;
}

这段代码出于某种原因只打印 false,但从来不打印 true,我已经尝试 运行 使用调试器通过它,它正确地计算了 sum 变量的值,但是在那之后最终总是打印 false 尽管总和等于用户输入的数字。

在第二个 while 循环中,您的 num 变量在 while 的所有迭代结束时等于零。并且您将 0 等同于 if 语句中的总和,因此它始终打印 false。 谢谢希望你会得到它

您对阿姆斯特朗数的定义是正确的,即 pow 位数字之和,其中 pow = count of digits.

但是,问题出现在最后一个while循环中。当 num equals to zero 时控件移出 while 循环。然后在声明中

if(sum==num){cout<<"true";}

你只是在比较 sum == 0 这显然是错误的。

解决方案:

只是简单地取另一个变量,比如temp2 = num,最后比较一下。

代码:

#include<iostream>
#include<math.h>
using namespace std;
int main() {
    int num,count,temp,temp2,sum=0,powr,rem;
    cin>>num;
    temp=num;
    
    temp2 = 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==temp2){cout<<"true";}
    else
    cout<<"false";

    return 0;
}

希望你觉得它有成果!