Inversul unui număr

Bază~13 min13 pași

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: 473

Formula-cheie: invers = invers * 10 + cifra

Observația-cheie

Î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

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

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.

Întrebarea 1 / 3

Care e inversul lui 374?