Я думаю, проблема в том, что вы не понимаете, что такое число Армстронга. Из одного веб-поиска:
Число Армстронга, состоящее из трех цифр, представляет собой целое число, такое, что сумма кубов его цифр равна самому числу. Например, 371 является числом Армстронга, так как 3 3 + 7 3 + 1 3 = 371.
Итак, чтобы проверить, есть ли какие-либослучайное число - это число Армстронга: скажем, 243. Возьмите число, как написано, и сделайте 2 × 2 × 2 + 4 × 4 × 4 + 3 × 3 × 3 = 8 + 16 + 27, что составляет всего 99, поэтому число 243 не является числом Армстронга.
Теперь есть два простых способа получить отдельные цифры номера в компьютерной программе. Сначала вы можете преобразовать в строку.
std::string theString = to_string(243);
А затем для каждой цифры преобразовать обратно в число. Это довольно грубое значение.
Или вы можете сделать это:
int sumOfCubes = 0;
for (int newNumber = myNumber; newNumber > 0; newNumber = newNumber / 10) {
// This is the modulus operator, or the remainder. 243 % 10 = 3.
// 24 % 10 = 4. and 2 % 10 = 2.
int digit = newNumber % 10;
sumOfCubes += digit*digit*digit;
}
if (sumOfCubes == myNumber) {
cout << myNumber << " is an Armstrong number." << endl;
}
Что происходит в цикле:
- newNumber инициализируется в myNumber (243 вмой пример). цифра становится 3 (243, деленное на 10, имеет остаток 3). sumOfCubes + = 27;
- Затем он зацикливается. newNumber становится newNumber / 10 как целое число, которое теперь составляет 24. цифра равна 4. Мы добавляем 64 к sumOfCubes.
- Повторяем зацикливание. newNumber становится 24/10 = 2. Итак, мы добавляем 8.
- Пытается зациклить. NewNumber становится равным нулю, что не соответствует условию, поэтому цикл заканчивается.
Готово.