剑指offer:数值的整数次方
题目
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路
快速幂算法:a^11 = a^(2^3+2^1+2^0) = a^(2^3) * a^(2^1) * a^(2^0) (11的二进制表示是1011)
也就是我们把指数转成二进制来计算就方便了,我们可以通过位运算&和>>来实现
代码
1 public double Power(double base, int exponent) { 2 double ans = 1,curr = base; 3 int ex = Math.abs(exponent); 4 while(ex!=0){ 5 if((ex&1)==1){ 6 ans *= curr; 7 } 8 curr *= curr; 9 ex = ex>>1; 10 } 11 return exponent>0?ans:1/ans; 12 }
keep positive and calm,then go on