# PBinfo #3119 – Impare_Bac – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

Cerința
Subprogramul Impare are un singur parametru, n, prin care primește un număr natural. Subprogramul înlocuiește fiecare cifră impară a lui n cu cea mai mare cifră pară strict mai mică decât ea (astfel cifra 1 se înlocuieşte cu cifra 0, cifra 3 cu cifra 2 etc.) și furnizează numărul obținut tot prin parametrul n. 

Scrieți definiția completă a subprogramului.

Restricții și precizări

1 ≤ n ≤ 1.000.000.000
Numele funcției va fi Impare
Funcția va primi un singur parametru, numărul n, iar la finalul funcției n va avea valoarea cerută.

Exemplu:
Dacă n=235690, atunci, după apel, n=224680, iar dacă n=15690, atunci, după apel, n=4680.

Important
Soluția propusă va conține doar definiția funcției cerute. Prezența în soluție a altor instrucțiuni poate duce la erori de compilare sau de execuție care vor avea ca efect depunctarea soluției.

## Cod sursă C++

```cpp
void Impare(int &n) {
    int oglinda = 0, zero = 0;
    while ((n % 10 == 0) || (n % 10 == 1))
        zero++, n = n / 10;
    while (n > 0) {
        int cif = n % 10;
        if (cif % 2 == 1) {
            cif--;
        } oglinda = oglinda * 10 + cif;
        n = n / 10;
    } while (oglinda > 0)
        n = n * 10 + oglinda % 10, oglinda = oglinda / 10;
    for (int i = 0; i < zero; i++)
        n = n * 10;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/3119)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/3119/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-3119/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
