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
相关产品推荐
相关产品推荐

