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.
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.
- Copia l'input in un file di lavoro variabile in questo modo il valore originale viene mantenuto per il confronto finale.
- Prendi l'ultima cifra con l'operatore modulo,
digit = tempNumber % 10. - Eleva quella cifra alla potenza del numero di cifre e aggiungila a un totale parziale.
- Elimina l'ultima cifra con la divisione intera,
tempNumber /= 10. - 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.
