
Cifra de control a unui număr
Acest articol explică ce este cifra de control a unui număr și cum se poate găsi aceasta în C++.
Cifra de control a unui număr este cifra care se obține efectuând suma cifrelor sale, după care suma acestei sume, după care suma acestei noi sume, și așa mai departe până când se obține un număr format dintr-o singură cifră.
Spre exemplu, pentru numărul 8538654
, cifra de control este 3
, obținută
astfel: 8538654
(suma cifrelor este 39
) -> 39
(suma cifrelor este 12
)
-> 12
(suma cifrelor este 3
) -> 3
(ne oprim).
Determinarea cifrei de control a unui număr
Metoda 1, intuitivă
Pentru a determina cifra de control a unui număr, putem pur și simplu să
aplicăm algoritmul de mai sus (presupunem că numărul inițial este n
):
int n = 8538654;
while(n > 9) { //Cât timp nu este cifră
int sumcif = 0; //Calculăm suma cifrelor lui n
do {
int u = n % 10;
sumcif += u;
n /= 10;
} while(n != 0);
n = sumcif; //Atribuim lui n suma cifrelor sale
}
cout << n << "\n"; //3
Timpul de execuție al codului este dependent de cifrele ale lui n
: dacă sunt
mai multe cifre, sau sunt cifre mai mari, timpul crește (însă nu
semnificativ).
Metoda 2, bazată pe proprietăți de divizibilitate
Mai există încă o modalitate de a afla cifra de control a unui număr. Vom
calcula restul împărțirii numărului nostru la 9
. Dacă restul este egal cu
0
(adică numărul se împarte la 9
), atunci cifra de control a numărului
este 9
. În caz contrar, cifra de control este restul. Iată codul:
int n = 8538654, cifraDeControl;
if(n % 9 == 0) {
cifraDeControl = 9;
} else {
cifraDeControl = n % 9;
}
cout << cifraDeControl << "\n"; //3
Cu ce ne ajută cifra de control?
Cifra de control este des utilizată în criptografie sau în validarea datelor, însă, de multe ori, poate să aibă altă definiție decât cea prezentată mai sus. Spre exemplu, a 13-a cifră din Codul Numeric Personal reprezintă o cifră de control, care asigură validitatea codului (de pildă, în cazul în care cineva își modifică CNP-ul pentru a părea că are altă vârstă), însă formula este un pic diferită față de cea menționată mai sus.
Exerciții propuse
Completează următoarele secvențe de cod:
Să se verifice dacă numărul natural n
se divide sau nu cu cifra de control:
int n, cifraDeControl;
cin >> n;
cifraDeControl = n;
while(cifraDeControl > 9) {
int sumcif = 0;
do {
int u = cifraDeControl % ???;
sumcif += u;
cifraDeControl /= 10;
} while(cifraDeControl != 0);
cifraDeControl = sumcif;
}
if(n % cifraDeControl == ???) {
cout << n << " se divide cu " << cifraDeControl << "\n";
} else {
cout << n << " nu se divide cu " << cifraDeControl << "\n";
}
Se dă o cifră. Afișați un număr care are ca cifră de control cifra dată:
int cif;
cin >> cif;
for(int i = 1; i <= ???; ++i) {
cout << "1";
}
Probleme propuse
Bibliografie sau alte resurse
DS
Autorul acestei lecții
Dominic Satnoianu
Această lecție a fost redactată de către Dominic Satnoianu.
© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.
Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.
Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.
Comentarii 0