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 3526 → Cifre pare: 2 / Cifre impare: 2
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
| Caz | Timp | Spațiu |
|---|---|---|
| Număr cu d cifre | O(log n) | O(1) |
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.