Число Армстронга в програмі JAVA з використанням циклу For
⚡ Розумний підсумок
Числа Армстронга дорівнюють сумі їхніх власних цифр, зведеній у степінь кількості цифр, і ці дві Java Наведені нижче програми перевіряють одне значення та перераховують усі числа Армстронга, що менше тисячі.
Що таке число Армстронга?
У числі Армстронга сума потужностей окремих цифр дорівнює самому числу.
Іншими словами, наступне рівняння буде вірним
xy..z = xn + yn+.....+ zn
n – кількість цифр у числі
Наприклад, це 3-значне число Армстронга
370 = 33 + 73 + 03 = 27 + 343 + 0 = 370
Приклади Армстронга Numbers
0, 1, 4, 5, 9, 153, 371, 407, 8208, etc.
Кожне одноцифрове значення від 0 до 9 тривіально задовольняє правило, оскільки одноцифрове число, піднесене до степеня одиниці, повертає саме себе. Повний набір трицифрових чисел Армстронга становить 153, 370, 371 та 407, тоді як 1634, 8208 та 9474 є чотирицифровими членами. Математики також називають ці значення нарцисичними числами, оскільки кожне з них відтворює себе зі своїх власних цифр.
Запишемо це в програмі:
Як працює алгоритм чисел Армстронга
Перш ніж читати код, корисно побачити арифметичні дії, які повторюють обидві програми. Для перевірки потрібно лише три операції: відокремити останню цифру, піднести її до потрібного степеня та скоротити число на один знак.
- Скопіюйте вхідні дані в робочий файл змінна таким чином початкове значення зберігається для остаточного порівняння.
- Візьмемо останню цифру за допомогою оператора модуля,
digit = tempNumber % 10. - Зведіть цю цифру в степінь кількості цифр і додайте її до проміжного підсумку.
- Відкинути останню цифру при цілочисельному діленні,
tempNumber /= 10. - Повторюйте, доки робоча змінна не досягне 0, потім порівняйте проміжний підсумок з початковим числом.
Виконання цих кроків протягом 153 призводить до tracнижче. Кожне значення в таблиці виводиться першою програмою, тому вивід можна зіставляти рядок за рядком під час навчання циклу.
| Проходити | тимчасовий номер | цифра | цифраКубСума |
| 1 | 153 | 3 | 27 |
| 2 | 15 | 5 | 152 |
| 3 | 1 | 1 | 153 |
| вихід | 0 | - | 153 дорівнює 153, отже, 153 – це число Армстронга |
Одне важливе обмеження. Обидві програми множать цифру на саму себе тричі, що є правильним степенем лише тоді, коли вхідні дані містять рівно три цифри. Загальне правило підносить кожну цифру до степеня n, де n — кількість цифр, тому чотиризначне значення, таке як 8208, потребує четвертого степеня і буде пропущено кодом на основі куба. Підрахунок цифр спочатку та піднесення кожної до цього степеня перетворює процедуру на загальний тест.
Після того, як арифметика зрозуміла, перша програма застосовує її до одного жорстко закодованого значення.
Java Програма для перевірки чи є число числом Армстронга
Клас нижче зберігає кандидата в inputArmstrongNumber і друкує робочі змінні на кожному проході, що робить Java цикл, який легко виконати в консолі.
//ChecktempNumber is Armstrong or not using while loop package com.guru99; public class ArmstrongNumber { public static void main(String[] args) { int inputArmstrongNumber = 153; //Input number to check armstrong int tempNumber, digit, digitCubeSum = 0; tempNumber = inputArmstrongNumber; while (tempNumber != 0) { /* On each iteration, remainder is powered by thetempNumber of digits n */ System.out.println("Current Number is "+tempNumber); digit =tempNumber % 10; System.out.println("Current Digit is "+digit); //sum of cubes of each digits is equal to thetempNumber itself digitCubeSum = digitCubeSum + digit*digit*digit; System.out.println("Current digitCubeSum is "+digitCubeSum); tempNumber /= 10; } //check giventempNumber and digitCubeSum is equal to or not if(digitCubeSum == inputArmstrongNumber) System.out.println(inputArmstrongNumber + " is an Armstrong Number"); else System.out.println(inputArmstrongNumber + " is not an Armstrong Number"); } }
Скомпілюйте та запустіть клас з кореневого каталогу проекту. Оскільки файл оголошує package com.guru99, він повинен знаходитися у відповідному com/guru99 папку, або середовище виконання повідомляє про помилку «клас не знайдено». Зміна значення в inputArmstrongNumber рядка — це все, що потрібно для перевірки іншого кандидата.
Вихід
Current Number is 153 Current Digit is 3 Current digitCubeSum is 27 Current Number is 15 Current Digit is 5 Current digitCubeSum is 152 Current Number is 1 Current Digit is 1 Current digitCubeSum is 153 153 is an Armstrong Number
Перевірка одного значення за раз корисна для tracінг, але та сама логіка масштабується до цілого діапазону шляхом обгортанняping це у зовнішньому циклі.
Java Програма для друку чисел Армстронга від 0 до 999
Друга версія зберігає ідентичну внутрішню частину while цикл і додає for цикл, який проходить по діапазону. Зверніть увагу, що digitCubeSum скидається до 0 на початку кожного проходу, що є деталлю, яку більшість новачків забувають.
//ChecktempNumber is Armstrong or not using while loop package com.guru99; public class ArmstrongNumber { public static void main(String[] args) { int tempNumber, digit, digitCubeSum; for (int inputArmstrongNumber = 0; inputArmstrongNumber < 1000; inputArmstrongNumber++) { tempNumber = inputArmstrongNumber; digitCubeSum = 0; while (tempNumber != 0) { /* On each iteration, remainder is powered by thetempNumber of digits n */ digit = tempNumber % 10; //sum of cubes of each digits is equal to thetempNumber itself digitCubeSum = digitCubeSum + digit * digit * digit; tempNumber /= 10; } //check giventempNumber and digitCubeSum is equal to or not if (digitCubeSum == inputArmstrongNumber) System.out.println(inputArmstrongNumber + " is an Armstrong Number"); } } }
Вихід
0 is an Armstrong Number 1 is an Armstrong Number 153 is an Armstrong Number 370 is an Armstrong Number 371 is an Armstrong Number 407 is an Armstrong Number
Перерахування зупиняється на 1, а не продовжується до 9, оскільки куб одноцифрового числа відповідає самій цифрі лише для 0 та 1. Піднесення кожної цифри до степеня кількості цифр поверне всі десять одноцифрових значень, що є тим самим узагальненням, що описано раніше.
Обидва списки достатньо короткі для порівняння, тому вартість підходу варто чітко вказати.
Часова та просторова складність програми чисел Армстронга
Внутрішній цикл ділить робочу змінну на 10 на кожному проході, тому він виконується один раз на кожну цифру, а не один раз на одиницю числа. Це робить перевірку одного значення надзвичайно дешевою, і вона залишається дешевою зі зростанням вхідних даних.
| програма | Часова складність | Складність простору |
| Перевірте одне число | O(d), де d – кількість розрядів | O (1) |
| Сканувати діапазон N чисел | O(N × d) | O (1) |
Оскільки d дорівнює log10(число) округлене в більшу сторону, єдина перевірка фактично логарифмічна за значенням, що перевіряється. Тільки три int змінні ніколи не виділяються, і не створюється масив чи колекція, тому вартість простору залишається постійною, незалежно від того, наскільки великим стає діапазон.
З цього випливають два практичні зауваження. По-перше, сканування діапазону переважно зосереджене на N, тому друк чисел Армстронга до мільйона коштує приблизно в тисячу разів дорожче, ніж друк їх до тисячі. По-друге, int переповнюється вище 2 147 483 647, тому потрібен пошук у дуже великих діапазонах long як для кандидата, так і для поточної суми. Та сама цифра-прикладtracшаблон позиції з'являється в багатьох вправах для початківців, включаючи перевірка простих чисел, Серія Фібоначчі програмні та масивні вправи, такі як сортування бульбашками та сортування вставки.
