题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
保证base和exponent不同时为0
思路:
** * 1.全面考察指数的正负、底数是否为零等情况。**
** * 2.写出指数的二进制表达,例如13表达为二进制1101。**
** * 3.举例:10^1101 = 10^000110^010010^1000。**
** * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。**
代码:
public class Solution {
public double Power(double base, int exponent) {
if (exponent == 0) {
return 1;
}
if (exponent == 1) {
return base;
}
if (base == 0){
return 0;
}
boolean flag = exponent > 0 ? true : false;
if(exponent < 0){
exponent = -exponent;
}
double ans = 1;
while(exponent > 0 ){
if((exponent & 1) == 1){
ans = ans * base;
}
exponent >>= 1;
base *= base;
}
return flag ? ans : 1/ans ;
}
}
京公网安备 11010502036488号