Armstrongov broj u JAVA programu pomoću petlje For

⚡ Pametni sažetak

Armstrongovi brojevi jednaki su zbroju vlastitih znamenki podignutih na potenciju broja znamenki, a te dvije Java Programi u nastavku provjeravaju jednu vrijednost i navode svaki Armstrongov broj ispod tisuću.

  • 🔘 Definicija: Za n-znamenkasti broj, svaka znamenka se podiže na potenciju n, a rezultati se zbrajaju.
  • ☑️ Obrađeni primjer: 370 se kvalificira jer 3³ plus 7³ plus 0³ vraća točno 370.
  • Digit Extraccija: Operator modulo odvaja posljednju znamenku, a cjelobrojno dijeljenje skraćuje broj u svakom prolazu.
  • 🧪 Dva programa: Jedan testira čvrsto kodiranu vrijednost 153, drugi prolazi kroz svaki broj od 0 do 999.
  • 🛠️ Poznata granica: Kubiranje svake znamenke funkcionira samo za troznamenkaste vrijednosti, tako da širi rasponi zahtijevaju potenciju n.
  • 📊 Složenost: Oba programa se izvršavaju u O(d) vremenu po broju i koriste O(1) dodatne memorije.

Armstrongov broj u Java program koji koristi for petlju

Što je Armstrongov broj?

U Armstrongovom broju, zbroj snaga pojedinačnih znamenki jednak je samom broju.

Drugim riječima, vrijedit će sljedeća jednadžba

xy..z = xn + yn+.....+ zn

n je broj znamenki u broju

Na primjer, ovo je troznamenkasti Armstrongov broj

370 = 33 + 73 + 03
 = 27 + 343 + 0
 = 370

Primjeri Armstronga Numbers

0, 1, 4, 5, 9, 153, 371, 407, 8208, etc.

Svaka jednoznamenkasta vrijednost od 0 do 9 trivijalno zadovoljava pravilo, jer jednoznamenkasti broj podignut na potenciju jedan vraća samog sebe. Potpuni skup troznamenkastih Armstrongovih brojeva je 153, 370, 371 i 407, dok su 1634, 8208 i 9474 četveroznamenkasti članovi. Matematičari ove vrijednosti nazivaju i narcističkim brojevima, budući da se svaki reproducira iz vlastitih znamenki.

Zapišimo ovo u programu:

Kako funkcionira Armstrongov algoritam brojeva

Prije čitanja koda, korisno je vidjeti aritmetiku koju oba programa ponavljaju. Provjera zahtijeva samo tri operacije: odvojiti posljednju znamenku, podići je na potrebnu potenciju i skratiti broj za jedno mjesto.

  1. Kopiraj ulaz u radni varijabla tako da originalna vrijednost preživljava za konačnu usporedbu.
  2. Uzmite posljednju znamenku s operatorom modulo, digit = tempNumber % 10.
  3. Podignite tu znamenku na potenciju broja znamenki i dodajte je tekućem zbroju.
  4. Izbacite posljednju znamenku kod cjelobrojnog dijeljenja, tempNumber /= 10.
  5. Ponavljajte postupak dok radna varijabla ne dosegne 0, a zatim usporedite tekući zbroj s izvornim brojem.

Izvođenje tih koraka preko 153 daje trace dolje. Svaku vrijednost u tablici ispisuje prvi program, tako da se izlaz može uspoređivati ​​redak po redak tijekom učenja petlje.

Proći privremeni broj cifra digitCubeSum
1 153 3 27
2 15 5 152
3 1 1 153
Exit 0 - 153 je jednako 153, pa je 153 Armstrongov broj

Jedno važno ograničenje. Oba programa množe znamenku sa samom sobom tri puta, što je ispravna potencija samo dok ulaz ima točno tri znamenke. Opće pravilo podiže svaku znamenku na potenciju n, gdje je n broj znamenki, pa četveroznamenkasta vrijednost poput 8208 treba četvrtu potenciju i kod temeljen na kocki bi je propustio. Brojanje znamenki prvo i podizanje svake na tu potenciju pretvara rutinu u opći test.

Nakon što je aritmetika raščišćena, prvi program je primjenjuje na jednu čvrsto kodiranu vrijednost.

Java Program za provjeru je li broj Armstrongov broj

Klasa ispod pohranjuje kandidata u inputArmstrongNumber i ispisuje radne varijable u svakom prolazu, što čini Java petlja koju je lako pratiti u 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");
	}
}

Kompajlirajte i pokrenite klasu iz korijena projekta. Budući da datoteka deklarira package com.guru99, mora se nalaziti u odgovarajućem com/guru99 mape ili okruženje za izvođenje prijavljuje grešku "klasa nije pronađena". Promjenom vrijednosti na inputArmstrongNumber linija je sve što je potrebno za testiranje drugog kandidata.

Izlaz

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

Provjeravanje jedne vrijednosti istovremeno je korisno za tracing, ali ista logika skalira na cijeli raspon prelamanjemping to u vanjskoj petlji.

Java Program za ispis Armstrongovih brojeva od 0 do 999

Druga verzija zadržava identičnu unutrašnjost while petlja i dodaje for petlja koja obilazi raspon. Imajte na umu da digitCubeSum se resetira na 0 na vrhu svakog prolaza, što je detalj koji većina početnika zaboravlja.

//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");
        }
    }
}

Izlaz

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

Popis se zaustavlja na 1 umjesto da se nastavi do 9 jer kub jedne znamenke odgovara samoj znamenki za 0 i 1. Podizanje svake znamenke na potenciju broja znamenki vratilo bi svih deset jednoznamenkastih vrijednosti, što je ista generalizacija opisana ranije.

Oba popisa su dovoljno kratka za usporedbu, tako da je vrijedno eksplicitno navesti trošak pristupa.

Vremenska i prostorna složenost Armstrongovog programa brojeva

Unutarnja petlja dijeli radnu varijablu s 10 u svakom prolazu, tako da se izvršava jednom po znamenki, a ne jednom po jedinici broja. To čini provjeru jedne vrijednosti izuzetno jeftinom i ostaje jeftina kako ulaz raste.

program Vremenska složenost Složenost prostora
Označi jedan broj O(d), gdje je d broj znamenki O (1)
Skeniraj raspon od N brojeva O(N × d) O (1)

Jer d je jednako logaritmu10(broj) zaokružen prema gore, pojedinačna provjera je zapravo logaritamska u vrijednosti koja se testira. Samo tri int Varijable se nikada ne dodjeljuju i ne stvara se niz ili kolekcija, zbog čega trošak prostora ostaje konstantan bez obzira na to koliko velik raspon postane.

Iz ovoga slijede dvije praktične napomene. Prvo, skeniranje raspona dominira N, pa ispis Armstrongovih brojeva do milijun košta otprilike tisuću puta više nego ispis do tisuću. Drugo, int prelijeva se iznad 2,147,483,647, pa je potrebno pretraživanje u vrlo velikim rasponima long i za kandidata i za tekući zbroj. Ista znamenka-npr.tracUzorak cije pojavljuje se u mnogim vježbama za početnike, uključujući i provjera prostih brojeva je Fibonaccijevi niz programske i nizovne vježbe kao što su sortiranje mjehurićima i umetanje sortirati.

Pitanja i odgovori

Da. Kubiranjem svake znamenke dobivamo 27 plus 343 plus 1, što daje zbroj od 371, pa se vrijednost sama reproducira. Gornji program za raspon ispisuje je uz 153, 370 i 407.

Naziv odražava samo svojstvo: broj je u potpunosti izgrađen od vlastitih znamenki, pa se čini kao da se divi vlastitom odrazu. Oba termina opisuju isto pravilo, a zbroj znamenki i potencija ponekad se naziva plussavršenom digitalnom invarijantom.

Postoje tri broja: 1634, 8208 i 9474. Svaka znamenka se podiže na četvrtu potenciju jer vrijednost ima četiri znamenke. Kod temeljen na kocki ne može ih prepoznati, zbog čega eksponent mora slijediti broj znamenki.

Savršen broj jednak je zbroju svojih pravih djelitelja, pa se 6 kvalificira kroz 1 plus 2 plus 3. Armstrongov broj jednak je zbroju svojih znamenki. Dvije definicije nemaju zajedničku aritmetiku i rijetko se preklapaju.

Math.pow() vraća double, pa je potrebno vraćanje na int i moguće su pogreške zaokruživanja. Za fiksni kocku, digit*digit*digit je brži i točniji. Math.pow() zaslužuje svoje mjesto samo kada se eksponent mijenja s brojem znamenaka.

Da. Pomoćna metoda može uzeti radnu vrijednost, dodati posljednju znamenku na pogon akumulatora i pozvati samu sebe s brojem podijeljenim s 10. Dobro se čita, iako verzija s petljom izbjegava dodatne okvire stoga.

Moderni asistenti mogu proizvesti prolaz zaobilaznim putem trace., preformulirajte petlju jednostavnim jezikom i predložite rubne slučajeve kao što su 0 ili negativni ulaz. Provjerite trace u odnosu na stvarni izlaz konzole, jer generirani vodiči povremeno preskaču iteraciju.

GitHub kopilot obično dovršava petlju samo na temelju naziva metode, ali često i hardkodira kocku. Navedite zahtjev za brojem znamenki u promptu, a zatim kompajlirajte i testirajte prijedlog prije nego što mu vjerujete.

Sažmite ovu objavu uz: