Cifrele unui număr

Bază~12 min13 pași

De ce contează?

Ai o cutie cu combinație: 3-7-4. Ca să o deschizi, introduci cifrele una câte una, de la dreapta la stânga. Calculatorul face exact același lucru cu numărul 374: împarte la 10 și ia restul — iar ce pare complicat devine pur mecanic.

Ce sunt cifrele unui număr?

Orice număr natural este format din cifre: 374 are cifrele 3, 7 și 4. În programare nu ai acces direct la „poziția" cifrelor — trebuie să le extragi una câte una, de la dreapta la stânga, folosind două operații simple.

Instrumentele de bază:

OperațieEfect pe n = 374Rezultat
n % 10Ultima cifră4
n / 10Elimină ultima cifră37

Numărul 374 văzut ca o secvență de cifre:

cifra
3
7
4
pozitie
0
1
2
374 are cifrele 3, 7, 4. Algoritmul le extrage de la dreapta spre stânga: 4, 7, 3.

Algoritmul: parcurgerea cifrelor

Repetăm doi pași cât timp n > 0:

  1. Extragem ultima cifră: cifra = n % 10
  2. O eliminăm: n /= 10

Urmărește cum evoluează n = 374:

n = 374  → cifra = 4,  n = 37
n = 37   → cifra = 7,  n = 3
n = 3    → cifra = 3,  n = 0
STOP (n == 0)
Observația-cheie

Cifrele sunt extrase de la dreapta la stânga — de la unități spre cifra cea mai semnificativă. Ține cont de asta când ordinea contează în problemă: dacă ai nevoie de cifre în ordine normală, stochează-le într-un vector și parcurge-l invers.

Implementare C++

#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    if (n == 0) {
        cout << 0 << endl;  // caz special: 0 are o singura cifra
        return 0;
    }

    while (n > 0) {
        int cifra = n % 10;  // extrage ultima cifra
        cout << cifra << " ";
        n /= 10;             // elimina ultima cifra
    }
    cout << endl;
    return 0;
}

Exemplu de rulare: Input 374 → Output 4 7 3

Complexitate

CazTimpSpațiu
Număr cu d cifreO(log n)O(1)

Un număr n are ⌊log₁₀(n)⌋ + 1 cifre, deci bucla rulează de ordinul log(n) ori — extrem de rapid.

Greșeli frecvente

Greșeala 1: Uiți cazul n = 0. Bucla while(n > 0) nu se execută deloc pentru 0, deci nu afișezi nimic. Tratează n == 0 separat.

Greșeala 2: Folosești int pentru numere mari (ex. 1.000.000.000). int merge până la ~2.1 miliarde. Dacă n poate depăși asta, folosește long long.

Greșeala 3: Crezi că cifrele ies în ordinea „normală" (stânga-dreapta). Ies de la dreapta la stânga. Dacă vrei ordinea inversă, stochează-le într-un vector și afișează în sens invers.

Întrebarea 1 / 3

Cum extragi ultima cifră a unui număr n?