# PBinfo #3642 – f_expo – Rezolvare C++

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

## Enunț

Cerinţa
Scrieţi definiția completă a subprogramului C++ cu antetul:

void f_expo(int a[], int n)
care are doi parametri:  


a, prin care primeşte un tablou unidimensional de numere naturale
n, numărul efectiv de elemente ale tabloului.

Subprogramul furnizează rezultatul tot prin intermediul tabloului a. Pentru fiecare element a[i], i=0..n-1, se calculează exponentul maxim e cu proprietatea că 2e ≤ a[i], iar rezultatul se va memora tot în a[i].

Restricţii şi precizări

1 ≤ a[i] ≤ 1.000.000
2 ≤ n ≤ 5.000.000
numele subprogramului cerut este f_expo
parametrii sunt, în această ordine: a, n
elementele vectorului a sunt indexate de la zero

Exemplu:
Dacă n=6, a=(9,1,5,15,19,30), după apel a=(3,0,2,3,4,4).

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

## Cod sursă C++

```cpp
/// Complexitate O(n log n)
void f_expo(int a[], int n)
{
    int x, e;
    for (int i = 0; i < n; i++)
    {
        x = a[i];
        for (e = 0; (1 << e) <= x; e++)
            ;
        a[i] = e - 1;
    }
}
```

## Resurse

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