Числа Армстронга(почти)
Нужно решить задачку. Надо найти такие натуральные числа, не более 10000, в которых сумма цифр в некоторой степени равна самому числу. Пример такого числа: 81, 8+1=9, 9^2=81. Ограничение по степени "5", так как 10^5=10000. Я так понимаю изначально нужен цикл, который целочисленным делением разобьёт число, а дальше очевидные действия, но я в корне не понимаю как реализовать полноценный код на cpp.
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Простейший перебор
#include <iostream>
using namespace std;
int powi(int x, int e)
{
int y = 1;
while(e) {
if (e&1) y *= x;
x*=x;
e >>= 1;
}
return y;
}
int main(int argc, char * argv[])
{
for(int n = 1; n <= 10000; ++n)
{
int d = 0, m = n;
while(m) { d += m%10; m /= 10; }
int e = 1;
if (d > 1) e = round(log(n)/log(d));
if (powi(d,e) == n)
cout << n << ": " << d << "^" << e << " = " << n << endl;
}
}
Целочисленное возведение в степень на всякий случай, вдруг отношение логарифмов с плавающей точкой не даст целое там, где должно...
P.S. Кстати, пятая степень появляется только для числа 17210368...
P.P.S. https://oeis.org/A023106