logo

Numărul magic în Java

În programare, a număr magic este o valoare numerică care este utilizată direct în cod. Este folosit în scopuri de identificare. În această secțiune, vom discuta ce este un număr magic și cum putem găsi un număr magic printr-un program Java.

Numărul magic în programare

A număr magic este o valoare numerică hard-coded (valoare text în unele cazuri) din cod care se poate modifica într-o etapă ulterioară. Pare arbitrar și nu are context sau sens. Este greu de actualizat. De exemplu:

 const num = 74; //where 2 is hard-coded const number = num / 2; //it should be properly defined 

Utilizarea unei astfel de constante ne poate ajuta să distingem fișierele între multe alte formate de fișiere. De exemplu:

  • Fișierele PDF încep cu textul magic %PDF -> Hex (25 50 44 46)
  • Fișierele PNG încep cu textul magic %PNG -> Hex (25 50 4E 47)

De ce ar trebui evitate numerele magice?

Nu ar trebui să folosim numerele magice în programare, deoarece duce la un anti-model care face codul dificil de înțeles și de întreținut. De asemenea, ascunde intenția, astfel încât utilizarea numerelor magice ar trebui evitată. Modificările în cod sunt, de asemenea, mai dure.

Se recomandă să utilizați constantă pentru a reprezenta valori în loc să folosiți numere magice. Îmbunătățește lizibilitatea codului și oferă o modificare ușoară a codului.

Numărul magic la matematică

În matematică, dacă suma cifrelor sale recursiv se calculează până la o singură cifră. Dacă o singură cifră este 1, atunci numărul se numește a număr magic . Este destul de asemănător cu număr fericit .

De exemplu, 325 este un număr magic deoarece suma cifrelor sale (3+2+5) este 10 și, însumând din nou rezultatul (1+0), obținem o singură cifră (1) ca rezultat. Prin urmare, numărul 325 este un număr magic.

Alte numere magice sunt 1234, 226, 10, 1, 37, 46, 55, 73 etc. .

Rețineți că, dacă un număr este un număr magic, atunci toate combinațiile posibile ale numărului vor fi și numere magice.

De exemplu, 532, 253, 325, 235, 352, 523 suma cifrelor tuturor numerelor dă 10 și din nou însumăm rezultatul (1+0), obținem o singură cifră, adică 1. Prin urmare, putem spune că și numărul magic și combinațiile sale sunt magice.

Să implementăm logica de mai sus într-un program Java și să verificăm dacă numărul dat este magic sau nu.

Programul Java Magic Number

MagicNumberExample1.java

 import java.util.Scanner; public class MagicNumberExample1 { public static void main(String args[]) { int n, remainder = 1, number, sum = 0; //creating a constructor of the Scanner class Scanner sc = new Scanner(System.in); System.out.print('Enter a number you want to check: '); //reading an integer form the user n = sc.nextInt(); //assigning the entered number in the variable num number = n; //outer while loop while (number > 9) //while(number > 0 || sum > 9) { //inner while loop while (number > 0) { //determines the remainder remainder = number % 10; sum = sum + remainder; //divides the number by 10 and removes the last digit of the number number = number / 10; } number = sum; sum = 0; } if (number == 1) { System.out.println('The given number is a magic number.'); } else { System.out.println('The given number is not a magic number.'); } } } 

Ieșire 1:

 Enter a number you want to check: 325 The given number is a magic number. 

Ieșire 2:

 Enter a number you want to check: 891 The given number is a magic number. 

Să vedem o altă logică pentru a verifica numărul magic.

MagicNumberExample2.java

 import java.util.Scanner; public class MagicNumberExample2 { public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.print('Enter any number to check: '); //reading an iteger from the user int number = scanner.nextInt(); if(magicNumber(number)) System.out.println(number +' is a magic number.'); else System.out.println(number +' is not a magic number.'); } //user-defined method to check the number is magic or not public static boolean magicNumber(int number) { if( ((number - 1) % 9) == 0) return true; else return false; } } 

Ieșire 1:

 Enter any number to check: 73 73 is a magic number. 

Ieșire 2:

 Enter any number to check: 671 671 is not a magic number. 

Număr magic vs număr fericit

Singura diferență între magie numere și fericit numerele este că într-un număr magic însumăm toate cifrele numărului în mod recursiv până când obținem o cifră semnal, adică 1. fericit număr, calculăm recursiv suma pătratului cifrelor până când obținem o singură cifră 1. Dacă acest proces are ca rezultat un ciclu nesfârșit de numere care conțin 4, atunci numărul se numește nefericit număr. De exemplu, trebuie să verificăm 19 este un număr magic și fericit sau nu.

Exemplu de număr magic Exemplu de număr fericit
We have to check n = 19 1 + 9 = 10 1 + 0 = <strong>1</strong> 
We have to check n=19 1<sup>2</sup>+ 9<sup>2</sup> = 1 + 81 = 82 8<sup>2</sup>+ 2<sup>2</sup> = 64 + 4 = 68 6<sup>2</sup>+ 8<sup>2</sup> = 36 + 64 = 100 1<sup>2</sup>+ 0<sup>2</sup>+0<sup>2</sup> = 1 + 0 + 0 = <strong>1</strong> 

În ambele cazuri, obținem 1 . Prin urmare, numărul 19 este un număr magic și, de asemenea, un număr fericit.