Armstrongi number JAVA programmis, kasutades For Loopi
โก Nutikas kokkuvรตte
Armstrongi arvud on vรตrdsed nende endi numbrite summaga, mis on korrutatud numbrite arvu astmesse, ja kahega Java Allolevad programmid kontrollivad รผhte vรครคrtust ja loetlevad kรตik Armstrongi arvud alla tuhande.
Mis on Armstrongi number?
Armstrongi numbris on รผksikute numbrite vรตimsuse summa vรตrdne arvu endaga.
Teisisรตnu kehtib jรคrgmine vรตrrand
xy..z = xn + yn+.....+ zn
n on numbrite arv numbris
Nรคiteks on see 3-kohaline Armstrongi number
370 = 33 + 73 + 03 = 27 + 343 + 0 = 370
Armstrongi nรคited Numbers
0, 1, 4, 5, 9, 153, 371, 407, 8208, etc.
Iga รผhekohaline vรครคrtus vahemikus 0 kuni 9 vastab reeglile triviaalselt, sest รผhekohaline arv astmes รผks tagastab iseenda. Kolmekohaliste Armstrongi arvude tรคielik komplekt on 153, 370, 371 ja 407, samas kui 1634, 8208 ja 9474 on neljakohalised liikmed. Matemaatikud nimetavad neid vรครคrtusi ka nartsissistlikeks arvudeks, kuna igaรผks neist reprodutseerib ennast omaenda numbritest.
Kirjutame selle programmi:
Kuidas Armstrongi arvu algoritm tรถรถtab
Enne koodi lugemist on kasulik nรคha aritmeetikat, mida mรตlemad programmid kordavad. Kontrolliks on vaja ainult kolme toimingut: viimase numbri eemaldamine, selle tรตstmine vajalikule astmele ja numbri lรผhendamine รผhe koha vรตrra.
- Kopeeri sisend tรถรถfaili muutuja seega jรครคb algne vรครคrtus lรตpliku vรตrdluse jaoks alles.
- Vรตtke viimane number modulo operaatoriga,
digit = tempNumber % 10. - Tรตsta see number vastava numbri astmeni ja lisa see jooksvale kogusummale.
- Eemalda viimane number tรคisarvulise jagamisega,
tempNumber /= 10. - Korda, kuni tรถรถmuutuja jรตuab nullini, seejรคrel vรตrdle jooksvat summat algse numbriga.
Nende sammude kรคivitamine รผle 153 annab tulemuseks tracallpool. Esimene programm prindib iga tabelis oleva vรครคrtuse, seega saab vรคljundit tsรผkli รตppimise ajal rida-realt sobitada.
| Sooritama | ajutine number | number | numbrilineKuubisumma |
| 1 | 153 | 3 | 27 |
| 2 | 15 | 5 | 152 |
| 3 | 1 | 1 | 153 |
| Vรคljapรครคs | 0 | - | 153 vรตrdub 153-ga, seega on 153 Armstrongi arv. |
รks oluline piirang. Mรตlemad programmid korrutavad numbri iseendaga kolm korda, mis on รตige aste ainult siis, kui sisendis on tรคpselt kolm numbrit. รldreegel on, et iga number astmes n on aste, kus n on numbrite arv, seega neljakohaline vรครคrtus, nรคiteks 8208, vajab neljandat astet ja kuubipรตhine kood jรคtaks selle kahe silma vahele. Numbrite esmalt loendamine ja iga numbri tรตstmine sellele astmele muudabki rutiini รผldiseks testiks.
Kui aritmeetika on selge, rakendab esimene programm seda รผhele kรตvakodeeritud vรครคrtusele.
Java Programm kontrollimaks, kas number on Armstrongi number
Allolev klass salvestab kandidaadi inputArmstrongNumber ja prindib iga kรคiguga tรถรถmuutujad, mis teeb Java konsoolis on tsรผkkel lihtne jรคlgida.
//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"); } }
Kompileeri ja kรคivita klass projekti juurest. Kuna fail deklareerib package com.guru99, see peab asetsema sobivas com/guru99 kausta vรตi kรคituskeskkond annab teada klassi mitteleidmise veast. Vรครคrtuse muutmine inputArmstrongNumber rida on kรตik, mida on vaja teise kandidaadi testimiseks.
Vรคljund
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
รhe vรครคrtuse korraga kontrollimine on kasulik tracing, aga sama loogika skaleerub tervele vahemikule mรคhise abilping see vรคlimises tsรผklis.
Java Programm Armstrongi numbrite printimiseks vahemikus 0 kuni 999
Teine versioon sรคilitab identse sisemise kรผlje. while tsรผkkel ja lisab for tsรผkkel, mis lรคbib vahemikku. Pane tรคhele, et digitCubeSum lรคhtestatakse iga kรคigu alguses vรครคrtusele 0, mis on detail, mille enamik algajaid unustab.
//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รคljund
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
Loend peatub 1 juures, selle asemel et jรคtkata 9-ni, sest รผhekohalise numbri kuup vastab numbrile endale ainult 0 ja 1 korral. Iga numbri tรตstmine numbrite arvu astmesse tagastaks kรตik kรผmme รผhekohalist vรครคrtust, mis on sama รผldistus, mida varem kirjeldati.
Mรตlemad loendid on vรตrdlusalusena piisavalt lรผhikesed, seega tasub lรคhenemisviisi maksumust selgesรตnaliselt vรคlja tuua.
Armstrongi arvuprogrammi ajaline ja ruumiline keerukus
Sisemine tsรผkkel jagab tรถรถmuutuja igal lรคbimisel 10-ga, seega see kรคivitub รผks kord iga numbri, mitte arvuรผhiku kohta. See muudab รผhe vรครคrtuse kontrolli รครคrmiselt odavaks ja jรครคb odavaks ka sisendi kasvades.
| Programm | Aja keerukus | Ruumi keerukus |
| Kontrolli รผhte numbrit | O(d), kus d on numbrite arv | O (1) |
| Skannige N numbri vahemikku | O(N ร d) | O (1) |
Sest d vรตrdub logaritmiga10(arv) รผmardatuna รผlespoole on รผhekordne kontroll testitava vรครคrtuse logaritmiline. Ainult kolm int Muutujaid eraldatakse kunagi ning massiivi ega kollektsiooni ei looda, mistรตttu ruumikulu jรครคb konstantseks olenemata sellest, kui suureks vahemik muutub.
Sellest tulenevad kaks praktilist mรคrkust. Esiteks domineerib vahemiku skaneerimisel N, seega maksab Armstrongi arvude printimine kuni miljonini umbes tuhat korda rohkem kui nende printimine kuni tuhandeni. Teiseks, int รผletab 2 147 483 647, seega on otsing vรคga suurtes vahemikes vajalik long nii kandidaadi kui ka jooksva summa puhul. Sama numbriline nรคidetractsioonimuster esineb paljudes algajate harjutustes, sealhulgas algarvu kontroll, Fibonacci seeria programmi- ja massiiviharjutused, nรคiteks mulli sorteerimine ja sisestamise sort.
