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 pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!