# PBinfo #2620 – FNextNumber – Rezolvare C++

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

## Enunț

Cerința
Să se scrie o funcție C++ cu următorul prototip:

long long NextNumber(long long n)
care primește ca parametru un număr natural nenul n și returnează cel mai mic număr natural, strict mai mare decât n, care are  în reprezentarea în baza 2 același număr de biți de 1 ca și n.

Restricții și precizări

Numele funcției va fi NextNumber
Se garantează că va numărul natural returnat se încadrează în tipul de date long long

Exemplu:
NextNumber(30) va returna valoarea 39.

Important
Soluţia propusă va conţine definiţia funcţiei cerute. 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
long long NextNumber(long long n)
{
    int i, t[66], k = 0, nr1;
    long long answer;
    while (n > 0)
    {
        t[++k] = n % 2;
        n /= 2;
    }
    /// sare peste zerouri
    for (i = 1; t[i] == 0; i++)
        ;
    /// sar peste prima secventa de 1-uri
    nr1 = 0;
    for ( ; i <= k && t[i] == 1; i++)
        nr1++;
    if (i <= k)
    {
        t[i--] = 1;
        nr1--;
        while (i > 0)
            t[i--] = 0;
        for (i = 1; i <= nr1; i++)
            t[i] = 1;
    }
    else
    {
        k++;
        t[k] = 1;
        nr1--;
        for (i = 1; i <= nr1; i++)
            t[i] = 1;
        for ( ; i < k; i++)
            t[i] = 0;
    }
    answer = 0;
    for (i = k; i >= 1; i--)
        answer = answer * 2 + t[i];
    return answer;
}
```

## Resurse

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