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; }