题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
思路1:简单粗暴,直接求。
底为0或1,则直接返回。
指数为负数,则结果为乘积取倒数。
指数为0,直接返回1.。
这里没有考虑数据无效的情况(底为0,指数为负数)
class Solution {
public:
double Power(double base, int exponent) {
if(base==1 || base==0) return base;
double save=base;
if(exponent<0)
{
save=1/base;
exponent = 0-exponent;
}
if(exponent==0) return 1;
base=1;
for(int i=0; i<exponent; i++)
{
base *= save;
}
return base;
}
};
思路2:
1.写出指数的二进制表达,例如13表达为二进制1101。
2.举例:10^1101 = 10^0001*10^0100*10^1000。
3.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
class Solution {
public:
double Power(double base, int exponent) {
//if(base==0 && exponent<0) throw new RuntimeException("分母不能为0");
if(base==0 || base==1) return base;
if(exponent==0) return 1;
int n = exponent<0 ? -exponent : exponent;
int res=1;
while(n != 0)
{
if((n&1)==1) res *= base;
base *= base;
n>>=1;
}
return exponent>0 ? res:1.0/res;
}
};
注:有看到说在做等于0的判断时,需要通过比较和0的差值在一定误差范围内才可以。
Equal(double num1, double num2)
{
if ((num1 - num2) > -0.0000001 && (num1 - num2) < 0.0000001)
{
return true;
}
else
{
return false;
}