Scrieți un subprogram care primește doi parametri, n și x, și care returnează valoarea absolută radicalului de ordin n din x.
Restricții și precizări
Subprogramul are următorul antet: long long nroot(int n, long long x);
2≤n≤1000;
−260≤x≤260;
Se garantează faptul că rezultatul este întotdeauna un număr întreg.
Exemple:
nroot( 10, 1024 ) returnează 2;
nroot( 3, 0 ) returnează 0.
Stiti de ce nu primesc 100 de puncte la aceasta problema?
#include
using namespace std;
long long cautare_binara(long long &x)
{long long v[61],p=1;
int i;
if(x<0)
x=-x;
for(i=1;i<=60;i++)
{ p=p*2;
v[i]=p;
}
int sol=-1,right=60,left=0,mij;
while(left<=right)
{int mij=(left+right)/2;
if(v[mij]==x)
{sol=mij;
break;
}
if(v[mij]>x)
right=mij-1;
if(v[mij]
left=mij+1;
}
return sol;
}
long long nroot(int n,long long x)
{if(x<0)
x=-x;
if(x!=1)
{if(n==2) return cautare_binara(x);
if(n>2)
{if(cautare_binara(x)==n)
return 2;
if(cautare_binara(x)>n) return cautare_binara(x)/n;
if(n>cautare_binara(x)) return 0;
}
if(cautare_binara(x)>n)
return cautare_binara(x)/n;
if(cautare_binara(x)
return 0;
}
if(x==1)
return 1;
}
int main()
{int n;
long long x;
cin>>n>>x;
cout<
return 0;
}
Vă mulțumim că ați ales să vizitați platforma noastră dedicată Informatică. Sperăm că informațiile disponibile v-au fost utile. Dacă aveți întrebări suplimentare sau aveți nevoie de sprijin, nu ezitați să ne contactați. Vă așteptăm cu drag și data viitoare! Nu uitați să adăugați site-ul nostru la favorite pentru acces rapid.