Программа на C++ для вычисления и отображения всех чисел Армстронга (таких чисел, что сумма каждой из цифр, возведенных в степень количества цифр, равна числу) от 100 до 999. Ответы должны быть 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;
}
pow
— это функция с плавающей запятой, и поэтому она будет иметь ошибки округления. Почему бы вместо этого не использовать простое целочисленное умножение, как в*iter * *iter * *iter
? - person Some programmer dude   schedule 01.01.2020