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.

  • ๐Ÿ”˜ Mรครคratlus: n-kohalise arvu puhul astmestatakse iga number n-ni ja tulemused liidetakse kokku.
  • โ˜‘๏ธ Tรถรถtatud nรคide: 370 kvalifitseerub, sest 3ยณ pluss 7ยณ pluss 0ยณ annab tรคpselt tulemuseks 370.
  • โœ… DigiExtracmine: Modulo operaator koorib viimase numbri maha ja tรคisarvuline jagamine lรผhendab arvu iga lรคbimisega.
  • ๐Ÿงช Kaks programmi: รœks testib kรตvakodeeritud vรครคrtust 153, teine โ€‹โ€‹โ€‹โ€‹kรคib lรคbi kรตik arvud vahemikus 0 kuni 999.
  • ๐Ÿ› ๏ธ Teadaolev piirang: Iga numbri kuupjagamine toimib ainult kolmekohaliste vรครคrtuste puhul, seega laiemad vahemikud vajavad n astme.
  • ๐Ÿ“Š Keerukus: Mรตlemad programmid tรถรถtavad O(d) ajaga numbri kohta ja kasutavad O(1) lisamรคlu.

Armstrongi arv Java programm for-tsรผkli abil

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.

  1. Kopeeri sisend tรถรถfaili muutuja seega jรครคb algne vรครคrtus lรตpliku vรตrdluse jaoks alles.
  2. Vรตtke viimane number modulo operaatoriga, digit = tempNumber % 10.
  3. Tรตsta see number vastava numbri astmeni ja lisa see jooksvale kogusummale.
  4. Eemalda viimane number tรคisarvulise jagamisega, tempNumber /= 10.
  5. 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.

KKK

Jah. Iga numbri kuubiks vรตtmine annab tulemuseks 27 pluss 343 pluss 1, mis teeb kokku 371, seega vรครคrtus taasesineb. รœlaltoodud vahemikuprogramm prindib selle koos numbritega 153, 370 ja 407.

Nimi peegeldab omadust ennast: arv on tรคielikult moodustatud omaenda numbritest, seega nรคib see imetlevat omaenda peegeldust. Mรตlemad terminid kirjeldavad sama reeglit ja numbrite astmesummat nimetatakse mรตnikord pluskvamperfektseks digitaalseks invariandiks.

Neid on kolm: 1634, 8208 ja 9474. Iga number astmestatakse neljandasse astmesse, kuna vรครคrtus on neljakohaline. Kuubipรตhine kood ei suuda neid tuvastada, mistรตttu peab astendaja jรคrgnema numbrite arvule.

Tรคistarv vรตrdub oma pรคrisjagajate summaga, seega 6 kvalifitseerub lรคbi 1 pluss 2 pluss 3. Armstrongi arv vรตrdub oma numbriastmete summaga. Neil kahel definitsioonil pole aritmeetikas รผhist ja need harva kattuvad.

Math.pow() tagastab topeltarvu, seega on vajalik tagasiteisamine tรคisarvuks ja รผmardusvead on vรตimalikud. Fikseeritud kuubi korral on digit*digit*digit kiirem ja tรคpsem. Math.pow() saab oma koha ainult siis, kui astendaja muutub koos numbrite arvuga.

Jah. Abistajameetod saab vรตtta tรถรถvรครคrtuse, liita akumulaatorile jalgatud viimase numbri ning kutsuda ennast vรคlja kรผmnega jagatud arvuga. See loeb hรคsti, kuigi tsรผkliversioon vรคldib lisapinu kaadreid.

Kaasaegsed assistendid suudavad toota mรถรถdasรตidu- ja mรถรถdasรตidusignaali. trace, sรตnasta tsรผkkel lihtsas keeles รผmber ja paku vรคlja รครคrmusjuhtumeid, nรคiteks 0 vรตi negatiivne sisend. Kontrolli trace reaalse konsooli vรคljundi suhtes, sest genereeritud lรคbimรคngud jรคtavad vahel iteratsiooni vahele.

GitHubi koopia tavaliselt lรตpetab tsรผkli ainuรผksi meetodi nime pรตhjal, aga tihtipeale on see kuubi kรตvakodeerinud. Esitage numbrite arvu nรตue kรคsuviibas ning seejรคrel kompileerige ja testige soovitust enne selle usaldamist.

Vรตta see postitus kokku jรคrgmiselt: