Numero Armstrong nel programma JAVA utilizzando il ciclo For

⚡ Riepilogo intelligente

I numeri di Armstrong sono uguali alla somma delle loro cifre elevate alla potenza del numero di cifre e i due Java I programmi seguenti verificano un singolo valore ed elencano tutti i numeri di Armstrong inferiori a mille.

  • 🔘 Definizione: Per un numero di n cifre, ogni cifra viene elevata alla potenza n e i risultati vengono sommati.
  • ☑️ Esempio pratico: 370 è valido perché 3³ più 7³ più 0³ dà esattamente 370.
  • Digit Extraczione: L'operatore modulo elimina l'ultima cifra e la divisione intera riduce il numero a ogni passaggio.
  • 🧪 Due programmi: Uno verifica un valore predefinito di 153, l'altro esegue un ciclo su tutti i numeri da 0 a 999.
  • Limite noto: Elevare al cubo ciascuna cifra funziona solo per valori a tre cifre, quindi per intervalli più ampi è necessario utilizzare una potenza di n.
  • 📊 Complessità: Entrambi i programmi vengono eseguiti in tempo O(d) per numero e utilizzano O(1) memoria aggiuntiva.

Numero di Armstrong in Java programma che utilizza un ciclo for

Cos'è il numero di Armstrong?

In un numero di Armstrong, la somma della potenza delle singole cifre è uguale al numero stesso.

In altre parole, la seguente equazione sarà vera

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

n è il numero di cifre in un numero

Ad esempio questo è un numero Armstrong a 3 cifre

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

Esempi di Armstrong Numbers

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

Ogni valore a una cifra da 0 a 9 soddisfa banalmente la regola, poiché un numero a una cifra elevato alla potenza di uno restituisce se stesso. L'insieme completo dei numeri di Armstrong a tre cifre è 153, 370, 371 e 407, mentre 1634, 8208 e 9474 sono i numeri a quattro cifre. I matematici chiamano questi valori anche numeri narcisistici, poiché ognuno di essi riproduce se stesso a partire dalle proprie cifre.

Scriviamolo in un programma:

Come funziona l'algoritmo dei numeri di Armstrong

Prima di leggere il codice, è utile osservare le operazioni aritmetiche che entrambi i programmi ripetono. Il controllo richiede solo tre operazioni: eliminare l'ultima cifra, elevarla alla potenza richiesta e ridurre il numero di una posizione.

  1. Copia l'input in un file di lavoro variabile in questo modo il valore originale viene mantenuto per il confronto finale.
  2. Prendi l'ultima cifra con l'operatore modulo, digit = tempNumber % 10.
  3. Eleva quella cifra alla potenza del numero di cifre e aggiungila a un totale parziale.
  4. Elimina l'ultima cifra con la divisione intera, tempNumber /= 10.
  5. Ripeti l'operazione finché la variabile di lavoro non raggiunge lo 0, quindi confronta il totale parziale con il numero iniziale.

Eseguire quei passaggi per 153 volte produce il trace sotto. Ogni valore nella tabella viene stampato dal primo programma, quindi l'output può essere confrontato riga per riga durante l'apprendimento del ciclo.

Passare Numero di temperatura cifra Somma del cubo delle cifre
1 153 3 27
2 15 5 152
3 1 1 153
uscita 0 - 153 è uguale a 153, quindi 153 è un numero di Armstrong

Un limite importante. Entrambi i programmi moltiplicano la cifra per se stessa tre volte, che è la potenza corretta solo quando l'input ha esattamente tre cifre. La regola generale eleva ogni cifra alla potenza n, dove n è il numero di cifre, quindi un valore di quattro cifre come 8208 richiede una quarta potenza e verrebbe ignorato dal codice basato sul cubo. Contare prima le cifre ed elevare ciascuna a quella potenza è ciò che trasforma la routine in un test generale.

Chiariti i calcoli aritmetici, il primo programma li applica a un singolo valore predefinito.

Java Programma per verificare se un numero è un numero di Armstrong

La classe seguente memorizza il candidato in inputArmstrongNumber e stampa le variabili di lavoro ad ogni passaggio, il che rende il Java ciclo facile da seguire in una console.

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

Compilare ed eseguire la classe dalla directory principale del progetto. Poiché il file dichiara package com.guru99deve stare in un posto corrispondente com/guru99 cartella, oppure il runtime segnala un errore di classe non trovata. Modificando il valore su inputArmstrongNumber Basta una riga per testare un altro candidato.

Uscita

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

Il controllo di un valore alla volta è utile per tracma la stessa logica si estende a un'intera gamma avvolgendoping in un ciclo esterno.

Java Programma per stampare i numeri di Armstrong da 0 a 999

la seconda versione mantiene l'interno identico while ciclo e aggiunge un for anello che percorre il poligono. Nota che digitCubeSum viene azzerato all'inizio di ogni passaggio, un dettaglio che la maggior parte dei principianti dimentica.

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

Uscita

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

L'elenco si interrompe a 1 anziché continuare fino a 9 perché il cubo di una singola cifra corrisponde solo alla cifra stessa per 0 e 1. Elevando ciascuna cifra alla potenza del numero di cifre, si otterrebbero invece tutti e dieci i valori a una cifra, che è la stessa generalizzazione descritta in precedenza.

Entrambi gli elenchi sono abbastanza brevi da poter essere utilizzati come riferimento, quindi vale la pena indicare esplicitamente il costo dell'approccio.

Complessità temporale e spaziale del programma numerico di Armstrong

Il ciclo interno divide la variabile di lavoro per 10 a ogni iterazione, quindi viene eseguito una volta per ogni cifra anziché una volta per ogni unità del numero. Questo rende il controllo del singolo valore estremamente efficiente, e tale efficienza si mantiene anche all'aumentare dell'input.

Programma Complessità temporale Complessità spaziale
Seleziona un numero O(d), dove d è il numero di cifre O (1)
Analizza un intervallo di numeri N O(N × d) O (1)

Poiché d è uguale al logaritmo10(numero) arrotondato per eccesso, il singolo controllo è effettivamente logaritmico nel valore testato. Solo tre int Le variabili non vengono mai allocate e non viene creato alcun array o collezione, motivo per cui il costo in termini di spazio rimane costante indipendentemente dalle dimensioni dell'intervallo.

Da ciò derivano due note pratiche. In primo luogo, la scansione dell'intervallo è dominata da N, quindi stampare i numeri di Armstrong fino a un milione costa circa mille volte di più che stamparli fino a mille. In secondo luogo, un int supera i 2,147,483,647, quindi è necessaria una ricerca su intervalli molto ampi long per entrambi i candidati e la somma progressiva. La stessa cifra-extracIl modello di zione appare in molti esercizi per principianti, tra cui il controllo dei numeri primi, il Serie di Fibonacci esercitazioni di programma e di serie come ordinamento a bolle and ordinamento per inserzione.

DOMANDE FREQUENTI

Sì. Elevando al cubo ogni cifra si ottiene 27 più 343 più 1, che sommato fa 371, quindi il valore si riproduce. Il programma di intervallo sopra lo stampa insieme a 153, 370 e 407.

Il nome riflette la proprietà stessa: il numero è costruito interamente dalle proprie cifre, quindi sembra ammirare il proprio riflesso. Entrambi i termini descrivono la stessa regola, e la somma delle potenze delle cifre è talvolta chiamata invariante digitale pluperfetto.

Ce ne sono tre: 1634, 8208 e 9474. Ogni cifra è elevata alla quarta potenza perché il valore ha quattro cifre. Il codice basato sui cubi non è in grado di rilevarle, motivo per cui l'esponente deve seguire il conteggio delle cifre.

Un numero perfetto è uguale alla somma dei suoi divisori propri, quindi 6 lo è tramite 1 più 2 più 3. Un numero di Armstrong è uguale alla somma delle potenze delle sue cifre. Le due definizioni non condividono alcuna operazione aritmetica e raramente si sovrappongono.

La funzione Math.pow() restituisce un valore double, quindi è necessario un cast a int e si possono verificare errori di arrotondamento. Per un cubo fisso, cifra*cifra*cifra è più veloce e preciso. Math.pow() è utile solo quando l'esponente varia con il numero di cifre.

Sì. Un metodo di supporto può prendere il valore di lavoro, aggiungere l'ultima cifra elevata a un accumulatore e richiamare se stesso con il numero diviso per 10. È leggibile, anche se la versione con ciclo evita i frame dello stack aggiuntivi.

Gli assistenti moderni possono produrre un passaggio per passaggio trace, riformula il ciclo in linguaggio semplice e suggerisci casi limite come 0 o un input negativo. Verifica il trace rispetto all'output reale della console, perché le procedure guidate generate a volte saltano un'iterazione.

Copilota GitHub Solitamente completa il ciclo basandosi solo sul nome del metodo, ma spesso il cubo viene codificato in modo statico. Specifica il requisito del numero di cifre nel prompt, quindi compila e testa il suggerimento prima di fidarti.

Riassumi questo post con: