如何解决C++ 中的 Armstrong 数字程序不打印正确的输出
#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,但从未打印过,并且我尝试使用调试器运行它,它正确计算了 sum 变量的值,但是,尽管总和等于用户输入的号码。
解决方法
在第二个 while 循环中,在 while 的所有迭代结束时,您的 num 变量等于零。并且您将零等于 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;
}
希望你觉得它富有成效!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。