给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
首先,这道题不是要你用语言中内置的pow函数。。。
可以用乘法实现幂次,这个比较简单,就不贴代码了。为O(n)时间复杂度
有一种叫做快速幂算法的方法,可以快速实现。为O(lgn)时间复杂度
具体原理暂时不懂,有机会写一下补充上来。可以参考这篇文档:https://wenku.baidu.com/view/2384ecc02cc58bd63186bdf6.html
代码如下:
pow(a,b)
如果b为0,结果为1
如果b为负数,pow(a,b) = 1.0 / pow(a,-b)
public class Solution {
public double Power(double base, int exponent) {
//指数为0
if(exponent==0){
return 1;
}
//指数的预处理(负指数变正)
int exponent_copy = exponent;//拷贝exponent
if(exponent<0){
exponent_copy = -exponent_copy;
}
//快速求幂
double ret = 1;
while(exponent_copy>0){
if(exponent_copy%2==1){//奇数
ret *= base;
}
exponent_copy /= 2;
base *= base;
}
if(exponent>0){ //指数为正
return ret;
}
else{//指数为负
return 1.0/ret;
}
}
}
声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。