您的位置:首页 > Web前端

剑指offer:(11)代码的完整性: 数值的整数次方

2017-04-23 09:50 423 查看
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

传统公式求解时间复杂度O(n)

public class Solution {
public static double Power(double base, int exponent) {
boolean g_invalid = false;
if(equal(base, 0.0) && exponent < 0){
g_invalid = true;
return 0.0;
}

int absExponent = exponent;
if(exponent<0){
absExponent = -exponent;
}

double result = powerWithUnsignedExponent(base,absExponent);
if(exponent<0){
result = 1.0/result;
}
return result;

}
public static boolean equal(double num1,double num2){
if(num1-num2 > -0.0000001 && num1-num2<0.0000001){
return true;
}else{
return false;
}
}
//时间复杂度为exponent-1
// public static double powerWithUnsignedExponent(double base,int exponent){
// double result = 1.0;
// for(int i = 1;i<=exponent;i++){
// result *= base;
// }
// return result;
// }
public static double powerWithUnsignedExponent(double base,int exponent){
if(exponent==0){
return 1.0;
}
if(exponent==1){
return base;
}
double result = powerWithUnsignedExponent(base, exponent>>1);
result *= result;
if((exponent & 1) == 1){
result *= base;
}
return result;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息