【发布时间】:2020-01-01 10:33:40
【问题描述】:
一个 C++ 程序,用于计算和显示介于 100 和 999 之间的所有 Armstrong 数字(数字的每个数字之和等于数字的幂次方)。答案应该是 153、370、 371, 407。它打印除了 153 之外的所有内容。
已完成调试以查看 i = 153 的各个数字的值。
#include <iostream>
#include <vector>
#include <math.h>
void separateDigits(int n, std::vector<int>& digits)
{
if (n>0)
{
separateDigits(n/10, digits);
digits.push_back(n%10);
}
}
int main()
{
for (int i = 100; i <= 999; i++)
{
std::vector<int> test;
separateDigits(i, test);
int powerSum = 0;
for (auto iter = test.begin(); iter != test.end(); iter++)
{
//powerSum = powerSum + pow((*iter),3);
powerSum = powerSum + (*iter)*(*iter)*(*iter);
}
if (i==powerSum)
{
std::cout << "Armstrong: " << i << std::endl;
}
}
return 0;
}
【问题讨论】:
-
我看到了 153 printed
-
pow是一个浮点函数,因此会有舍入误差。为什么不使用纯整数乘法,如*iter * *iter * *iter? -
你的代码对我来说完全没问题!
-
奇怪。对我不起作用,屏幕截图已添加到帖子中。
标签: c++ loops number-theory