Hola25
Hola25 Logo
Hola25
Utilizatori disponibili

Înapoi la blog

Piese colorate sunt aranjate simetric în fața unei oglinzi, sugerând citirea în ambele sensuri.
Ilustrație conceptuală generată cu AI; explicațiile și schemele de învățare sunt în articol.
Informatică

Oglinditul și numerele palindrom la BAC: exemple C++

Hola25
Hola25
Autor

21 octombrie 2026

6 min citire

În acest articol

Oglinditul unui număr se obține citind cifrele sale de la dreapta la stânga. Un număr este palindrom dacă este egal cu oglinditul său: de exemplu, 12321 își păstrează valoarea, iar 123 devine 321 și nu este palindrom. La BAC informatică, metoda se construiește din extragerea cifrelor și adăugarea lor la un rezultat nou.

Lucrăm cu numere naturale de cel mult un miliard și folosim un tip întreg suficient de mare pentru rezultatul intermediar. Numărul zero este tratat ca având o cifră și este palindrom. Exemplele sunt exerciții originale de învățare, iar metoda trebuie adaptată domeniului concret din enunțul de examen.

Formula de construire a oglinditului

La fiecare pas extragi ultima cifră prin c=n%10, apoi actualizezi rezultatul cu ogl=ogl*10+c. Înmulțirea cu zece face loc unei noi cifre la dreapta. La început, oglinditul este zero, deoarece nu a fost prelucrată nicio cifră.

Pentru n=247, primul pas produce șapte. Al doilea transformă șapte în șaptezeci și adaugă patru, obținând șaptezeci și patru. Ultimul transformă rezultatul în șapte sute patruzeci și adaugă doi. Oglinditul final este șapte sute patruzeci și doi.

Schema: extragi cifra → înmulțești rezultatul cu zece → adaugi cifra → elimini cifra din copie.

Copie înainte Cifră extrasă Oglindit înainte Oglindit după Copie după
247 7 0 7 24
24 4 7 74 2
2 2 74 742 0

Ordinea actualizărilor este importantă. Dacă elimini cifra înainte de extragere, pierzi cifra unităților. Dacă aduni cifra fără înmulțirea cu zece, calculezi suma cifrelor, nu oglinditul. Dacă înmulțești după adunare la fiecare pas, introduci un zero suplimentar în rezultat.

Program complet pentru verificarea palindromului

#include <iostream>
using namespace std;

int main() {
    unsigned long long n;
    cin >> n;
    unsigned long long copie = n, ogl = 0;
    do {
        unsigned int cifra = copie % 10;
        ogl = ogl * 10 + cifra;
        copie /= 10;
    } while (copie > 0);

    if (ogl == n)
        cout << "DA";
    else
        cout << "NU";
    return 0;
}

Variabila n rămâne neschimbată. Copia este cea care pierde cifrele. Comparația finală folosește numărul inițial, nu copia ajunsă la zero. Dacă ai compara oglinditul cu copia, ai obține aproape mereu un rezultat negativ și ai testa o proprietate diferită.

Bucla cu test final execută un pas și pentru zero. Cifra extrasă este zero, oglinditul rămâne zero, iar comparația este adevărată. Pentru o singură cifră nenulă, rezultatul este aceeași cifră, deci orice număr natural de o cifră este palindrom.

De ce dispar zerourile din dreapta numărului inițial

Pentru n=1200, cifrele sunt extrase în ordinea zero, zero, doi, unu. Primele două actualizări păstrează oglinditul egal cu zero. A treia produce doi, iar ultima douăzeci și unu. Oglinditul numeric este 21, nu o valoare distinctă numită 0021.

Zerourile din fața unei reprezentări nu schimbă valoarea unui număr natural. Dacă enunțul cere inversarea unui șir de caractere cu lungime fixă, cele două zerouri trebuie păstrate ca simboluri. Acolo rezolvi o problemă de text, nu simpla construire a unui număr întreg. Distincția dintre valoare și reprezentare este decisivă.

Un număr natural nenul care se termină cu zero nu poate fi palindrom în reprezentarea zecimală obișnuită. Oglindirea ar pune zero în față, iar reprezentarea inițială nu începe cu zero. Poți folosi observația pentru a respinge rapid un caz, dar algoritmul complet funcționează și fără această optimizare.

Verificare pas cu pas pentru un palindrom

Pentru n=10301, oglinditul evoluează prin valorile unu, zece, o sută trei, o mie treizeci și zece mii trei sute unu. Zerourile din interior sunt păstrate deoarece, după prima cifră nenulă, înmulțirea cu zece le rezervă poziția chiar dacă cifra adăugată este zero.

Cifră prelucrată Oglindit nou
1 1
0 10
3 103
0 1030
1 10301

Comparația finală este adevărată. Nu confunda zerourile interioare cu cele care ar apărea în fața rezultatului. În primul caz au valoare pozițională și nu pot fi omise; în al doilea nu schimbă valoarea numerică.

Cum justifici algoritmul

După fiecare iterație, rezultatul conține în ordinea extragerii cifrele deja eliminate din copia numărului. Inițial nu există cifre prelucrate, iar rezultatul este zero. Actualizarea prin înmulțire și adunare atașează exact următoarea cifră. Când copia ajunge la zero, toate pozițiile au fost prelucrate.

Această descriere este o invariantă simplă: explică ce reprezintă rezultatul pe parcurs, nu numai la final. Ea te ajută să reconstruiești formula dacă o uiți. Înmulțirea cu zece nu este un truc arbitrar; deplasează cifrele existente cu o poziție spre stânga pentru a elibera unitățile.

Numărul de pași este egal cu numărul cifrelor prelucrate. Pentru un număr cu k cifre, timpul este proporțional cu k, iar memoria suplimentară este constantă. Nu ai nevoie de un vector care să rețină fiecare cifră pentru această variantă numerică.

Limita tipului numeric

O valoare care încape într-un tip nu garantează că și oglinditul încape în același tip. De exemplu, un număr apropiat de limita unui întreg pe treizeci și doi de biți poate avea un oglindit mai mare decât acea limită. Pentru domeniul de cel mult un miliard folosit aici, tipul unsigned long long are suficient spațiu.

Dacă problema permite toate valorile reprezentabile de un tip foarte larg, trebuie să verifici înainte de actualizare dacă înmulțirea și adunarea ar depăși limita sau să compari reprezentări textuale. Nu prezenta programul de mai sus ca soluție universală pentru un număr cu oricâte cifre. Domeniul intrării este parte din corectitudine.

Exerciții cu răspunsuri

1. Care este oglinditul lui 4050? Răspuns: 504. Prima cifră extrasă, zero, nu schimbă rezultatul inițial; zero din mijlocul rezultatului este însă păstrat prin deplasarea pozițională.

2. Sunt palindroame numerele 1001, 110 și 7? Răspuns: primul și ultimul sunt palindroame. Oglinditul lui o sută zece este unsprezece, deci comparația este falsă.

3. Un elev scrie ogl=ogl+cifra. Ce obține? Răspuns: suma cifrelor. Lipsa înmulțirii cu zece elimină informația despre poziția fiecărei cifre. Pentru 123, obține șase în loc de trei sute douăzeci și unu.

4. Găsește un palindrom de cinci cifre cu cifra centrală zero și suma cifrelor egală cu doisprezece. Răspuns posibil: 24042. Cifrele simetrice coincid, iar suma este doi plus patru plus zero plus patru plus doi. Verifică și faptul că prima cifră nu este zero.

Întrebări frecvente

Trebuie să construiesc oglinditul dacă se cere doar verificarea?

Nu obligatoriu. Poți compara cifre simetrice sau caracterele reprezentării. Metoda cu oglindit este însă directă pentru domenii numerice care permit stocarea rezultatului.

Numărul zero este palindrom?

Da, în reprezentarea sa obișnuită, formată dintr-o singură cifră. Dacă un exercițiu impune numere nenule, zero este exclus prin domeniu, nu pentru că ar pierde proprietatea.

Pot reutiliza variabila inițială?

Da, dacă păstrezi valoarea originală în altă variabilă înainte de parcurgere. Pentru comparația finală trebuie să mai ai acces la ea.

Exersează metoda pe cerințe BAC și bareme, apoi explică de ce funcționează formula, aplicând învățarea prin înțelegere. Pentru verificarea propriului cod, poți discuta cazurile-limită cu un profesor de informatică. Consultă programa oficială de informatică pentru algoritmii elementari din specializarea ta.

Surse