题目:实现函数double power(double base,int exponent),求base的exponent次方。不能使用库函数,同时不需要考虑大数问题。
思路:这个题目可以求某个数字的 平方根,立方根。思路就是先判断不合法输入,也就是0分之1,base=0且exponent<0的情况。然后判断exponent是否<0,如果小于0其实可以先算-exponent的 情况(也就是正数),然后统一计算base的正数exponent的次方,其实就是将exponent个base 乘起来。然后返回(若exponent<0,就返回1除以返回值)
class Solution {
public:
double Power(double base, int exponent) {
if(base==0 && exponent<0) return 0;
int absexp = exponent;
if(exponent<0) absexp=-absexp;
double res = cal(base,absexp);
if(exponent<0) return 1.0/res;
return res;
}
double cal(double base,int exp) //用位运算来操作,o(logn)复杂度
{
if(exp==0) return 1;
if(exp==1) return base;
double res=cal(base,exp>>1); //每次计算除以2的,然后将他俩相乘
res*=res;
if(exp&1) res*=base; //如果exponent是奇数,那就多乘以个base就行
return res;
}
double cal0(double base,int exp) //一步一步乘
{
double res=1.0;
for(int i=1;i<=exp;++i) res*=base;
return res;
}
};