De ce contează?
Privești numărul 374 într-o oglindă și obții 473. Calculatorul nu are oglindă — în schimb construiește noul număr cifră cu cifră: ia ultima cifră a originalului și o „lipește" la dreapta inversului în construcție. Formula se derulează singură, pas cu pas.
Cum se construiește inversul?
La fiecare pas extragem ultima cifră a lui n și o adăugăm la dreapta inversului curent. Urmărește pentru n = 374:
n = 374, invers = 0
cifra = 4: invers = 0 * 10 + 4 = 4
cifra = 7: invers = 4 * 10 + 7 = 47
cifra = 3: invers = 47 * 10 + 3 = 473
Rezultat: 473Formula-cheie: invers = invers * 10 + cifra
Înmulțirea cu 10 „mută" cifrele deja colectate cu o poziție la stânga, eliberând locul unităților pentru noua cifră. E exact ca și cum ai scrie numărul invers, cifră cu cifră, pe hârtie.
Implementare C++
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int invers = 0;
int temp = n;
while (temp > 0) {
int cifra = temp % 10;
invers = invers * 10 + cifra; // adauga cifra la dreapta
temp /= 10;
}
cout << invers << endl;
return 0;
}Exemplu: Input 374 → Output 473
Aplicație: verificarea palindromului
Un număr e palindrom dacă e egal cu inversul său — se citește la fel în ambele sensuri:
if (n == invers)
cout << "palindrom" << endl;
else
cout << "nu e palindrom" << endl;Exemple: 121, 3443, 7 sunt palindroame. 123 nu este.
Complexitate
| Caz | Timp | Spațiu |
|---|---|---|
| Număr cu d cifre | O(log n) | O(1) |
Greșeala 1: Zerourile finale ale originalului dispar în invers. 1200 inversat numeric este 21, nu 0021. Ca număr întreg e corect, dar dacă problema cere să păstrezi zerourile, lucrează cu șiruri de caractere.
Greșeala 2: Overflow la inversare. int ține până la ~2.1 miliarde. Inversând 1.000.000.007 obții 7.000.000.001 care nu încape în int. Folosește long long.
Greșeala 3: Compari n cu invers dar ai modificat n în buclă. Salvează n înainte de buclă sau folosește copia temp pentru extragere.