面试手写Sqrt和Pow
#include<bits/stdc++.h>
using namespace std;
double Sqrt(double n)
{
double l=0,r=max(1.0,n),mid;
int x=1000;
while(r-l>=0.000001)
{
mid=(l+r)/2;
if(mid*mid<=n)l=mid;
else r=mid;
}
return l;
}
double quick(double t,int q)
{
double ans=1;
while(q)
{
if(q&1)ans*=t;
t*=t;
q/=2;
}
return ans;
}
double POW(double t,double q)
{
int Q=q;
q-=Q;
// double ans=0;
// cout<<Q<<endl;
// if(Q!=0)
double ans=quick(t,Q);
// double T=q/0.5;
// int k=0;
// cout<<ans<<endl;
double ANS=t;
while(q)
{
int x=q*2;
q=q*2-x;
ANS=Sqrt(ANS);//t^{2^-1=1/2+2^{-2}=1/4+...+}=t^{1/{2^{0.5}}^2+}
if(x!=0)
{
ans*=ANS;
}
}
return ans;
}
/*
0.75
0.01101001
0.101
*/
int main()
{
while(1)
{
double n,q;
cin>>n>>q;
printf("%.6f %.6f\n",pow(n,q),POW(n,q));
// double n;
// cout<<"input:\n";
// cin>>n;
// cout<<"output:\n";
// double ans=Sqrt(n);
// printf("%.6f ",ans);
// printf("%.7f\n",sqrt(n)-ans);
}
}
/*
*/