数值的整数次方
描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
代码 (Java)
public class Solution {
public double Power(double base, int exponent) {
// 判断输入是否合法,输入为0且指数是负数时,求倒数不合法
// 更好的判断两个double型是否相等的方法可以是转化为字符串比较,
// 或者通过两数相减小于某个精度(比如0.000001)时则相等,否则不等
if (base == 0.0 && exponent < 0)
return 0.0;
// 取指数的绝对值
int absExponent = Math.abs(exponent);
double result = PowerWithAbsExponent(base, absExponent);
// 对于指数小于0,需要取倒数
if (exponent < 0)
result = 1.0 / result;
return result;
}
// 通过指数二分的方法来高效做乘方(当然也可以直接通过for循环来做乘方)
public double PowerWithAbsExponent(double base, int absExponent) {
if (absExponent == 0)
return 1;
if (absExponent == 1)
return base;
// 用右移运算符代替除以2
double result = PowerWithAbsExponent(base, absExponent >> 1);
result *= result;
// 用位与运算代替求余% 来判断奇数还是偶数
if ((absExponent & 1) == 1)
result *= base;
return result;
}
}
思路
- 详见代码注释