Verificări pe cifre

Bază~15 min13 pași

De ce contează?

Codul PIN 1221 este palindrom. Numărul 2244 are toate cifrele pare. Verificările pe cifrele unui număr sunt tipice la olimpiade: „Câte cifre pare are?", „Toate cifrele sunt distincte?", „E palindrom?". Toate se rezolvă cu același mecanism: parcurgerea cifrelor cu o condiție adăugată.

Pattern general

Orice verificare pe cifre arată la fel — o buclă de extragere cu logica ta specifică în interior:

bool proprietate = true;  // presupunem ca e adevarat
int temp = n;
while (temp > 0) {
    int cifra = temp % 10;
    // verifica conditia pe cifra curenta
    temp /= 10;
}

Exemple frecvente

Toate cifrele sunt pare?

bool toatePare = true;
int temp = n;
while (temp > 0) {
    if ((temp % 10) % 2 != 0) {
        toatePare = false;
        break;  // gasita o cifra impara, ne oprim
    }
    temp /= 10;
}

Câte cifre pare are?

int contor = 0;
int temp = n;
while (temp > 0) {
    if ((temp % 10) % 2 == 0) contor++;
    temp /= 10;
}

Este palindrom?

int invers = 0, temp = n;
while (temp > 0) {
    invers = invers * 10 + temp % 10;
    temp /= 10;
}
bool palindrom = (n == invers);

Implementare C++ — problemă completă

#include <iostream>
using namespace std;

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

    int contor_pare = 0, contor_impare = 0;
    int temp = n;

    while (temp > 0) {
        int cifra = temp % 10;
        if (cifra % 2 == 0) contor_pare++;
        else contor_impare++;
        temp /= 10;
    }

    cout << "Cifre pare: " << contor_pare << endl;
    cout << "Cifre impare: " << contor_impare << endl;
    return 0;
}

Exemplu: Input 3526Cifre pare: 2 / Cifre impare: 2

Observația-cheie

Poți combina oricâte verificări într-o singură parcurgere. Nu ai nevoie de bucle separate — o buclă cu mai mulți acumulatori sau condiții paralele este mai clară și mai eficientă.

Complexitate

CazTimpSpațiu
Număr cu d cifreO(log n)O(1)
Greșeli frecvente

Greșeala 1: Verifici n % 2 == 0 pentru „toate cifrele pare". Asta testează doar ultima cifră (paritatea lui n), nu toate cifrele. Exemplu: 12 este par, dar cifra 1 este impară.

Greșeala 2: Nu tratezi n = 0. Prin convenție, 0 are o singură cifră (0), care este pară.

Greșeala 3: Uiți break după ce ai găsit o cifră care invalidează condiția. Odată ce știi că răspunsul e NU, oprești bucla — break evită iterații inutile.

Întrebarea 1 / 3

Cum verifici dacă toate cifrele unui număr sunt pare?