给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
–
注意特殊值,负数、0等。
public class Solution {
public double Power(double base, int exponent) {
if(exponent == 0)
return 1;
int flag = 0; //1表示exponent为负数
if(exponent < 0) {
if(base == 0.0)
throw new IllegalArgumentException();
exponent = -exponent;
flag = 1;
}
double res = 1.0;
for(int i = 1; i <= exponent;i++) {
res *= base;
}
return flag == 1 ? 1.0 / res : res;
}
}
Power2比较高效的算法
public class Solution {
public double Power(double base, int exponent) {
if(exponent == 0)
return 1;
int flag = 0; //1表示exponent为负数
if(exponent < 0) {
if(base == 0.0)
throw new IllegalArgumentException();
exponent = -exponent;
flag = 1;
}
double res = Power2(base,exponent);
return flag == 1 ? 1.0 / res : res;
}
private double Power2(double base, int exponent) {
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double res = Power2(base,exponent >> 1);
res *= res;
if((exponent & 1) == 1)
res *= base;
return res;
}
}