题目:实现函数double power(double base,int exponent),求base的exponent次方 不得使用库函数 同时不需要考虑大数问题
考虑到base 为0 或者指数为0时 无意义
base为1时返回base
指数为负数时返回 倒数
<pre name="code" class="cpp">bool equal(double n1,double n2)//浮点数比较大小~~~~
{
if(abs(n1-n2)<0.000001)
return true;
else
return false;
}
double power(double base,int exponent)
{
if(equal(base,0)|| equal(exponent,0))
return 0;
if(equal(base,1)|| equal(exponent,1))
return base;
bool flag=false;
if(exponent<0)
flag=true;
double r=1;
for(int i=0;i<abs(exponent);i++)
{
r=base*r;
}
if(flag==true)
r=1/r;
return r;
}
当exponent> 0 求base^exponent时
b^n=b^x+b^y=b^(a0*2^0+a1*2^1+.......+ak*2^k)
其中 n=a0*2^0+a1*2^1+........+ak*2^k ai=0或1 即n的二进制表示
double powerabs(double base,int n)
{
if(n==0)
return 1;
if(n==1)
return base;
double r=1;
int temp=base;
while(n)
{
if(n&0x1==1)
r*=temp;
temp*=temp;
n>>=1;
}
return r;
}