Sari la conținut
LECȚIA 14.2 · INFORMATICĂ

Palindrom, oglindit și cifra de control

Trei prelucrări clasice de cifre care apar constant la subiectul I și II.

Conținut verificat

Oglinditul unui număr

Oglinditul unui numar
#include <iostream>
using namespace std;

int main() {
    int n, ogl = 0;
    cin >> n;
    while (n > 0) {
        ogl = ogl * 10 + n % 10;
        n = n / 10;
    }
    cout << ogl;
    return 0;
}

Atenție: Oglinditul se construieste inmultind cu 10 si adaugand ultima cifra. Numarul initial se distruge in timpul buclei, de aceea daca mai e nevoie de el trebuie pastrata o copie.

se trimit programului la citire

Pentru n = 1234: ogl devine 4, 43, 432, 4321. Atenție: n se DISTRUGE în proces; dacă îl mai folosești, salvează o copie.

Testul de palindrom

Un număr e palindrom dacă e egal cu oglinditul lui (121, 3443, 7).

Verificarea daca un numar e palindrom
#include <iostream>
using namespace std;

int main() {
    int n, copie, ogl = 0;
    cin >> n;
    copie = n;
    while (n > 0) {
        ogl = ogl * 10 + n % 10;
        n /= 10;
    }
    if (copie == ogl) cout << "DA";
    else cout << "NU";
    return 0;
}

Atenție: Copia se face INAINTE de bucla. Daca se face dupa, n e deja zero si comparatia ar fi mereu falsa.

se trimit programului la citire

Cifra de control

Cifra de control = aplici repetat suma cifrelor până rămâne O SINGURĂ cifră.

Pentru 9875: 9+8+7+5=29→2+9=11→1+1=29+8+7+5 = 29 \to 2+9 = 11 \to 1+1 = 2. Cifra de control: 2.

Cifra de control
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    while (n > 9) {
        int s = 0;
        while (n > 0) {
            s += n % 10;
            n /= 10;
        }
        n = s;
    }
    cout << n;
    return 0;
}

Atenție: Se aduna cifrele pana ramane o singura cifra. Rezultatul e egal cu restul impartirii numarului la 9, cu observatia ca multiplii lui 9 dau 9, nu 0.

se trimit programului la citire

Scurtătura matematică (pentru verificare rapidă): cifra de control este 1+(n−1) mod 91 + (n - 1) \bmod 9 pentru n>0n > 0 (restul modulo 9, cu 9 în loc de 0). Pentru 9875: 9875=9⋅1097+29875 = 9 \cdot 1097 + 2, deci 2 ✓.

Greșeli frecvente

  1. Uitarea copiei la palindrom: după buclă n e 0, comparația n == ogl e mereu falsă (except 0).
  2. La oglindit, numerele terminate în 0 pierd zeroul (120 → 21): e comportamentul corect matematic, dar menționează-l dacă se cere.
  3. Cifra de control cere DOUĂ bucle imbricate (sau formula mod 9), nu o singură sumă.