fbpx

Problema #2620 – FNextNumber – Rezolvari PBInfo

de Mihai-Alexandru

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.

long long int NextNumber(long long int n)
{
    int a[100] = {0} , nc = 0;
    long long int x = n;
    while(x)
    {
        a[++nc]=x%2;
        x/=2;
    }
    int cnt0=0 , cnt1=0 , i = 1;
    while(!a[i])
        i++ , cnt0++;
    while(a[i])
        i++ , cnt1++;
    if(i > nc)
        nc++;
    cnt0++;
    a[i]=1;
    int j = i - 1;
    for(int d = 1 ; d <= cnt0 ; d++ , j--)
        a[j]=0;
    for(int c = 1 ; c < cnt1 ; c++ , j--)
        a[j]=1;
    long long int p = 1;
    for(i = 1 ; i <= nc ; ++i)
        {
            x = x + a[i] * p;
            p*=2;
        }
    return x;
}
Comentarii

S-ar putea sa iti placa