Число Армстронга в програмі JAVA з використанням циклу For

⚡ Розумний підсумок

Числа Армстронга дорівнюють сумі їхніх власних цифр, зведеній у степінь кількості цифр, і ці дві Java Наведені нижче програми перевіряють одне значення та перераховують усі числа Армстронга, що менше тисячі.

  • 🔘 Визначення: Для n-розрядного числа кожну цифру підносять до степеня n, а результати додають.
  • ☑️ Приклад роботи: 370 підходить, оскільки 3³ плюс 7³ плюс 0³ повертає рівно 370.
  • ✅ Digit Extracції: Оператор модуля відщеплює останню цифру, а цілочисельне ділення скорочує число з кожним проходом.
  • 🧪 Дві програми: Один перевіряє жорстко закодоване значення 153, інший перебирає кожне число від 0 до 999.
  • 🛠️ Відома межа: Кубування кожної цифри працює лише для трицифрових значень, тому для ширших діапазонів потрібен степінь n.
  • 📊 Складність: Обидві програми виконуються за O(d) часу на кожне число та використовують O(1) додаткової пам'яті.

Число Армстронга в Java програма з використанням циклу for

Що таке число Армстронга?

У числі Армстронга сума потужностей окремих цифр дорівнює самому числу.

Іншими словами, наступне рівняння буде вірним

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 є чотирицифровими членами. Математики також називають ці значення нарцисичними числами, оскільки кожне з них відтворює себе зі своїх власних цифр.

Запишемо це в програмі:

Як працює алгоритм чисел Армстронга

Перш ніж читати код, корисно побачити арифметичні дії, які повторюють обидві програми. Для перевірки потрібно лише три операції: відокремити останню цифру, піднести її до потрібного степеня та скоротити число на один знак.

  1. Скопіюйте вхідні дані в робочий файл змінна таким чином початкове значення зберігається для остаточного порівняння.
  2. Візьмемо останню цифру за допомогою оператора модуля, digit = tempNumber % 10.
  3. Зведіть цю цифру в степінь кількості цифр і додайте її до проміжного підсумку.
  4. Відкинути останню цифру при цілочисельному діленні, tempNumber /= 10.
  5. Повторюйте, доки робоча змінна не досягне 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шаблон позиції з'являється в багатьох вправах для початківців, включаючи перевірка простих чисел, Серія Фібоначчі програмні та масивні вправи, такі як сортування бульбашками та сортування вставки.

Поширені запитання

Так. Зведення кожної цифри в куб дає 27 плюс 343 плюс 1, що в сумі дає 371, тому значення самовідтворюється. Програма діапазону вище виводить його разом із 153, 370 та 407.

Назва відображає саму властивість: число повністю побудоване з власних цифр, тому воно ніби милується власним відображенням. Обидва терміни описують одне й те саме правило, а суму цифр і степенів іноді називають плюскофектним цифровим інваріантом.

Їх три: 1634, 8208 та 9474. Кожна цифра зводиться до четвертого степеня, оскільки число має чотири цифри. Код на основі куба не може їх розпізнати, тому показник степеня має слідувати за кількістю цифр.

Досконале число дорівнює сумі своїх власних дільників, тому 6 проходить через 1 плюс 2 плюс 3. Число Армстронга дорівнює сумі своїх степенів розрядів. Ці два визначення не мають спільної арифметики та рідко перетинаються.

Math.pow() повертає значення типу double, тому потрібне приведення до цілого числа, і стають можливими помилки округлення. Для фіксованого куба digit*digit*digit є швидшим і точним. Math.pow() заробляє своє місце лише тоді, коли показник степеня змінюється залежно від кількості цифр.

Так. Допоміжний метод може прийняти робоче значення, додати останню цифру до акумулятора та викликати себе з числом, поділеним на 10. Це добре читається, хоча версія з циклом уникає додаткових фреймів стеку.

Сучасні помічники можуть створювати обхідні сигнали tracе., переформулюйте цикл простою мовою та запропонуйте граничні випадки, такі як 0 або негативний вхід. Перевірте trace проти реального виводу консолі, оскільки згенеровані покрокові інструкції іноді пропускають ітерацію.

Копілот GitHub зазвичай завершує цикл лише за назвою методу, але часто він жорстко кодує куб. Вкажіть вимогу щодо кількості розрядів у запиті, потім скомпілюйте та перевірте пропозицію, перш ніж довіряти їй.

Підсумуйте цей пост за допомогою: