一、题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
二、解题思路
首先判断指数的情况:
1)指数为正数,正常计算;
2)指数为负数,则先取反,最后计算结果时取倒数,其中底数不能为0;
3)指数为0,结果为1。
在计算时可将指数转化为二进制形式计算。
例如:
3^13=3^1101=3^0001 × 3^0100 × 3^1000
通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
三、编程实现
class Solution {
public double Power(double base, int n) {
double res = 1;
int exponent;
if (n > 0) {
exponent = n;
} else if (n < 0) {
if (base == 0) {
System.out.println("Infinity");
}
exponent = -n;
} else {
// n==0
return 1;
}
while (exponent != 0) {
if ((exponent & 1) == 1) {
res *= base;
}
// 翻倍
base *= base;
// 右移一位
exponent >>= 1;
}
return (n >= 0) ? res : (1 / res);
}
}