Armstrongovo číslo v programu JAVA pomocí pro smyčku
⚡ Chytré shrnutí
Armstrongova čísla se rovnají součtu jejich vlastních číslic umocněnému na počet číslic a obou Java Níže uvedené programy kontrolují jednu hodnotu a vypisují všechna Armstrongova čísla pod tisíc.
Co je Armstrongovo číslo?
V Armstrongově čísle se součet mocnin jednotlivých číslic rovná samotnému číslu.
Jinými slovy bude platit následující rovnice
xy..z = xn + yn+.....+ zn
n je počet číslic v čísle
Například toto je 3místné Armstrongovo číslo
370 = 33 + 73 + 03 = 27 + 343 + 0 = 370
Příklady Armstronga Numbers
0, 1, 4, 5, 9, 153, 371, 407, 8208, etc.
Každé jednociferné číslo od 0 do 9 splňuje pravidlo triviálně, protože jednociferné číslo umocněné na jedničku vrací samo sebe. Úplná sada trojciferných Armstrongových čísel je 153, 370, 371 a 407, zatímco 1634, 8208 a 9474 jsou čtyřciferné členy. Matematici tyto hodnoty také nazývají narcistická čísla, protože každé z nich se reprodukuje ze svých vlastních číslic.
Napíšeme to v programu:
Jak funguje algoritmus Armstrongova čísla
Než si přečtete kód, je dobré si uvědomit aritmetické operace, které oba programy opakují. Kontrola vyžaduje pouze tři operace: oddělit poslední číslici, umocnit ji na požadovanou hodnotu a zkrátit číslo o jedno místo.
- Zkopírujte vstup do funkčního proměnlivý takže původní hodnota přežije pro konečné porovnání.
- Vezměte poslední číslici s operátorem modulo,
digit = tempNumber % 10. - Umocněte tuto číslici na počet číslic a přičtěte ji k průběžnému součtu.
- Při celočíselném dělení odstraňte poslední číslici,
tempNumber /= 10. - Opakujte, dokud pracovní proměnná nedosáhne 0, a poté porovnejte průběžný součet s původním číslem.
Spuštěním těchto kroků přes 153 se získá tracníže. Každou hodnotu v tabulce vytiskne první program, takže výstup lze během učení smyčky porovnávat řádek po řádku.
| Přejít | dočasné číslo | číslice | digitCubeSum |
| 1 | 153 | 3 | 27 |
| 2 | 15 | 5 | 152 |
| 3 | 1 | 1 | 153 |
| Výstup | 0 | - | 153 se rovná 153, takže 153 je Armstrongovo číslo |
Jedno důležité omezení. Oba programy vynásobí číslici samou sebou třikrát, což je správná mocnina pouze tehdy, pokud má vstup přesně tři číslice. Obecné pravidlo umocňuje každou číslici na n, kde n je počet číslic, takže čtyřciferná hodnota, jako například 8208, potřebuje čtvrtou mocninu a kód založený na krychlích by ji přehlédl. Spočítání číslic a následné umocnění každé číslice na tuto mocninu promění rutinu v obecný test.
Po vymazání aritmetických operací první program aplikuje tyto operace na jednu pevně zakódovanou hodnotu.
Java Program pro kontrolu, zda je číslo Armstrongovo číslo
Níže uvedená třída ukládá kandidáta do inputArmstrongNumber a při každém průchodu vytiskne pracovní proměnné, což dělá Java smyčka, kterou lze snadno sledovat v konzoli.
//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"); } }
Zkompilujte a spusťte třídu z kořenového adresáře projektu. Protože soubor deklaruje package com.guru99, musí sedět v odpovídajícím com/guru99 složku nebo běhové prostředí hlásí chybu „třída nenalezena“. Změna hodnoty ve inputArmstrongNumber linka je vše, co je potřeba k otestování jiného kandidáta.
Výstup
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
Kontrola jedné hodnoty najednou je užitečná pro tracing, ale stejná logika se škáluje na celý rozsah pomocí zalamováníping to ve vnější smyčce.
Java Program pro tisk Armstrongových čísel od 0 do 999
Druhá verze si zachovává identický vnitřní prostor. while smyčka a přidá for smyčka, která prochází rozsahem. Všimněte si, že digitCubeSum se na začátku každého průchodu vynuluje na 0, což je detail, na který většina začátečníků zapomíná.
//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"); } } }
Výstup
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
Výpis se zastaví na čísle 1, místo aby pokračoval až k číslu 9, protože třetí mocnina jedné číslice odpovídá samotné číslici pouze pro 0 a 1. Umocnění každé číslice na počet číslic by vrátilo všech deset jednociferných hodnot, což je stejné zobecnění, jaké bylo popsáno dříve.
Oba seznamy jsou dostatečně krátké na to, aby se daly srovnávat, takže je vhodné explicitně uvést náklady na daný přístup.
Časová a prostorová složitost Armstrongova číselného programu
Vnitřní smyčka dělí pracovní proměnnou číslem 10 při každém průchodu, takže se provede jednou za každou číslici, nikoli jednou za každou jednotku čísla. Díky tomu je kontrola jedné hodnoty extrémně levná a zůstává levná i s rostoucím vstupem.
| Program | Časová složitost | Prostorová složitost |
| Zaškrtněte jedno číslo | O(d), kde d je počet číslic | O (1) |
| Naskenujte rozsah N čísel | O(N × d) | O (1) |
Protože d se rovná logaritmu10(číslo) zaokrouhleno nahoru, je jednotlivá kontrola efektivně logaritmická v testované hodnotě. Pouze tři int Proměnné se nikdy alokují a nevytváří se žádné pole ani kolekce, proto náklady na prostor zůstávají konstantní bez ohledu na to, jak velký je rozsah.
Z toho vyplývají dvě praktické poznámky. Zaprvé, skenování rozsahu je dominantně ovlivněno N, takže tisk Armstrongových čísel do milionu stojí zhruba tisíckrát více než tisk do tisíce. Zadruhé, int přetéká nad 2 147 483 647, takže vyhledávání ve velmi velkých rozsazích vyžaduje long pro kandidáta i průběžný součet. Stejná číslice - např.tracVzorec působení se objevuje v mnoha cvicích pro začátečníky, včetně kontrola prvočíslase Fibonacciho řada programové a array cvičení, jako například bublinové řazení a řazení řazení.
