剑指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   }

 

posted @ 2019-07-21 14:57  huanglf714  阅读(138)  评论(0编辑  收藏  举报