题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
代码的完整性:功能测试,边界测试,负面测试
本题要注意考虑底数为0或负数以及指数为0或者负数的情况
public class Solution {
public double Power(double base, int exponent) throws Exception{
// 小数类型比较不能用==,但是最后还是通过了测试,可以转化为大数值
// 用compareTo
if (base == 0.0)
if (exponent == 0)
throw new Exception("0^0 is no sense in math");
else if (exponent < 0)
throw new Exception("0^negative");
long absExponent = Math.abs(exponent); // int的最小负数绝对值是大于最大正数的
double result = powerWithUnsignedExponent(base, absExponent);
if (exponent < 0)
return 1.0 / result;
return result;
}
public double powerWithUnsignedExponent(double base, long absExponent)
{
if (absExponent == 0)
return 1;
if (absExponent == 1)
return base;
double result = powerWithUnsignedExponent(base, absExponent >> 1);
result *= result;
if ((absExponent & 1) == 1)
result *= base;
return result;
}
}
上面代码用了如下公式求平方
且用位运算取代了除以2以及判定奇数的求余