Video: Cifra de control a unui număr

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

Problema Cifra de control

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

Autentifică-te pentru a putea comenta.

Autentifică-te