W programowaniu A magiczny numer to wartość liczbowa używana bezpośrednio w kodzie. Służy do celów identyfikacyjnych. W tej części omówimy co to jest liczba magiczna I jak znaleźć magiczną liczbę za pomocą programu Java.
Magiczna liczba w programowaniu
A magiczny numer to zakodowana na stałe wartość liczbowa (w niektórych przypadkach wartość tekstowa) w kodzie, która może ulec zmianie na późniejszym etapie. Wydaje się to arbitralne i nie ma kontekstu ani znaczenia. Trudno jest zaktualizować. Na przykład:
const num = 74; //where 2 is hard-coded const number = num / 2; //it should be properly defined
Użycie takiej stałej może pomóc nam rozróżnić pliki spośród wielu innych formatów plików. Na przykład:
- Pliki PDF zaczynają się od magicznego tekstu %PDF -> Hex (25 50 44 46)
- Pliki PNG zaczynają się od magicznego tekstu %PNG -> Hex (25 50 4E 47)
Dlaczego warto unikać magicznych liczb?
Nie powinniśmy używać magicznych liczb w programowaniu, ponieważ prowadzi to do powstania antywzorca, który utrudnia zrozumienie i utrzymanie kodu. Ukrywa również intencję, dlatego należy unikać stosowania liczb magicznych. Zmiany w kodzie są również trudniejsze.
Zaleca się używanie stałych do reprezentowania wartości zamiast używania liczb magicznych. Poprawia czytelność kodu i umożliwia łatwą modyfikację kodu.
Magiczna liczba w matematyce
W matematyce, jeśli suma jej cyfr rekurencyjnie jest obliczana do jednej cyfry. Jeżeli pojedynczą cyfrą jest 1, to liczbę nazywamy a magiczny numer . Jest dość podobny do szczęśliwy numer .
Na przykład, 325 jest liczbą magiczną, ponieważ suma jej cyfr (3+2+5) wynosi 10, a gdy ponownie zsumujemy wynik (1+0), otrzymamy jedną cyfrę (1). Zatem liczba 325 jest liczbą magiczną.
Są jeszcze inne magiczne liczby 1234, 226, 10, 1, 37, 46, 55, 73 itd. .
Zauważ, że jeśli liczba jest liczbą magiczną, to wszystkie możliwe kombinacje tej liczby również będą liczbami magicznymi.
Na przykład 532, 253, 325, 235, 352, 523 suma cyfr wszystkich liczb daje 10 i ponownie sumując wynik (1+0) otrzymujemy jednocyfrową tj. 1. Stąd możemy powiedzieć że magiczna liczba i jej kombinacje również są magiczne.
Zaimplementujmy powyższą logikę w programie Java i sprawdźmy, czy podana liczba jest magiczna, czy nie.
Program w języku 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.'); } } }
Wyjście 1:
Enter a number you want to check: 325 The given number is a magic number.
Wyjście 2:
Enter a number you want to check: 891 The given number is a magic number.
Zobaczmy inną logikę, aby sprawdzić magiczną liczbę.
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; } }
Wyjście 1:
Enter any number to check: 73 73 is a magic number.
Wyjście 2:
Enter any number to check: 671 671 is not a magic number.
Magiczna liczba kontra szczęśliwa liczba
Jedyna różnica pomiędzy magia liczby i szczęśliwy polega na tym, że w liczbie magicznej rekurencyjnie sumujemy wszystkie cyfry tej liczby, aż otrzymamy cyfrę sygnałową, tj. 1. Będąc w szczęśliwy liczbę, rekurencyjnie obliczamy sumę kwadratów cyfr, aż otrzymamy pojedynczą cyfrę 1. Jeśli w wyniku tego procesu powstanie nieskończony cykl liczb zawierających 4, wówczas liczbę nazywamy nieszczęśliwy numer. Musimy na przykład sprawdzić 19 jest magiczną i szczęśliwą liczbą, czy nie.
Przykład magicznej liczby | Przykład szczęśliwej liczby |
---|---|
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> |
W obu przypadkach otrzymujemy 1 . Stąd liczba 19 jest liczbą magiczną i jednocześnie szczęśliwą.