Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

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

# Problemă Dificultate
27. Cifra de control Medie (4 )

Bibliografie sau alte resurse

Cuprinsul lecției

Se încarcă…

Citește și

Maximul și minimul a două valori în C++Verificare număr prim în C++ (Clasa a IX-a)Valoarea absolută (modulul) unui număr în C++Instrucțiunea for (structuri repetitive)Recursivitate în C++Generarea șirului Fibonacci generalizat în C++Citește un șir de caractere cu spații în C++Transformarea unei litere mari în literă mică în C++Numărul de divizori al unui număr în C++CMMDC recursiv a două numere naturale în C++Interclasarea a doi vectori în C++Transformarea unui număr din baza 2 în baza 10 în C++Algoritm recursiv pentru căutare binară (clasa a X-a)Comentarii în C++Cifra de control a unui numărOperații cu numere mari în C++ - Toate funcțiile explicateSuma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Aria și circumferința unui cerc în C++Bordarea unei matrice în C++Factorialul unui număr în C++Al N-lea termen dintr-o progresie geometricăInversarea unui vector în C++Instrucțiunea while (structuri repetitive)Oglinditul unui număr în C++Indicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Prima cifră a unui număr în C++Transformarea unei litere mici în literă mare în C++Câte numere naturale sunt într-un interval dat? (C++)Verifică dacă o literă este vocală în C++Numărul de apariții al unui număr într-un vector în C++Cel mai frecvent element dintr-un șir în C++Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Inversarea unui șir de caractere în C++Cifra maximă și minimă a unui număr în C++Calculul combinărilor de n luate câte k (nCk) în C++Aria unui triunghi folosind coordonatele acestora în C++Suma numerelor naturale dintr-un interval dat în C++Vectorii în C++: citire și afișareCel mai mare divizor comun (CMMDC) a două numere în C++Combinatorică în C++: permutări, aranjamente, combinări și alteleStructuri repetitive (while, do while, for, etc)Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortOglinditul recursiv al unui număr în C++Ce înseamnă variabilă globală și locală în C++?Verificare dacă șir de caractere este palindrom în C++Vectori de frecvență (de apariții) în C++Verifică dacă un număr dat este o putere de 2 în C++Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicRidicarea la putere în timp logaritmic în C++. Exponențiere rapidăCăutare binară în C++Instrucțiunea break (structuri repetitive)Cum să calculezi instant 2 la puterea N în C++Al N-lea termen dintr-o progresie aritmeticăAplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorNumărul permutărilor în C++ (formula permutărilor)Distanța dintre două puncte în C++Cum să afișezi partea întreagă a unui număr real în C++Află secolul unui an citit de la tastatură în C++Funcții în C++. Ce sunt subprogrameleVerificarea unui an bisect în C++Verificare dacă un număr este palindrom în C++Suma 1 + 2 + 3 + ... + N în C++Maximul și minimul unui vector în C++Divide et Impera (metodă de programare C++)Verifică dacă un număr este par sau impar fără modulo în C++Ce este o variabilă unsigned în C++?Verifică dacă un caracter este cifră în C++Vectorii în C++: declarare și parcurgereCel mai puțin semnificativ bit în C++Suma divizorilor unui număr în C++Maximul și minimul a n valori în C++Numere triunghiulare. Verificarea unui număr triunghiularCel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Afișarea elementelor unui vector recursiv în C++Numărul aranjamentelor în C++ (formula aranjamentelor)Verifică dacă trei puncte sunt coliniare C++Numărul combinărilor în C++ (formula combinărilor)Aflarea sumei primelor N sume GaussAl N-lea termen Fibonacci în C++Rădăcina cubică a unui număr în C++ (cube root)Instrucțiunea de decizie în C++: if, else, switch, caseTipul struct în C++. Ce sunt structurile de date neomogeneCifrele unui număr. Prelucrarea cifrelor unui număr în C++Șirul lui Fibonacci în C++Transformarea unui număr din baza 10 în baza 2 în C++Cum să citești și să afișezi în fișiere în C++Complexitatea unui algoritm (timp și spațiu) în C++Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Cifra maximă a unui număr recursiv în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleAfișarea divizorilor primi ai unui număr în C++Ce înseamnă endl în C++?Maximul și minimul a trei valori în C++Ce este o funcție void în C++?Ciurul lui Eratostene în C++Indicatorul lui Euler în C++Suma elementelor unui vector recursiv în C++De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Pointer în C++. Variabile de tipul char * (char steluță)Cel mai mic număr cu suma cifrelor N în C++Verifică dacă un număr aparține șirului Fibonacci în C++Șiruri de caractere în C++. Tot ce trebuie să știiNumărul minim de peroane pentru o gară în C++Funcții predefinite în C++ (matematice, șiruri de caractere)Copiuțe: Cifrele unui numărInstrucțiunea continue (structuri repetitive)Tipuri de date în C++: numere întregi, reale, caractere și alteleInterschimbarea a două variabile în C++ (3 metode)Verifică dacă o literă este mică sau mare în C++Do while vs while în C++ - Care e diferența?Verifică dacă un caracter este literă în C++Mediana unui șir de valori în C++Citirea și afișarea matricelor în C++Numărul de cifre ale factorialului unui numărMatrice pătratice în C++. Diagonala principală și secundarăNumărul de divizori primi ai unui număr în C++Instrucțiunea do while (structuri repetitive)CMMMC a două numere în C++ (cel mai mic multiplu comun)Radicalul unui număr în C++ (rădăcina pătrată)Cel mai semnificativ bit în C++Materia pentru olimpiada de informatică - tot ce trebuie să știiCodul ASCII (tabel complet)Cea mai lungă secvență de elemente crescătoare în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont