330
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