【位运算】数值的整数次方

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

 

 1 /**
 2  * 1.全面考察指数的正负、底数是否为零等情况。
 3  * 2.写出指数的二进制表达,例如13表达为二进制1101。
 4  * 3.举例:10^1101 = 10^0001*10^0100*10^1000。
 5  * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
 6  */
 7 public class Solution {
 8     public double Power(double base, int exponent) {
 9 
10         double result = 1;
11         double current = base;
12         int n = 0; // exponent绝对值
13 
14         if (exponent > 0) { // exponent>0
15             n = exponent;
16         } else if (exponent < 0) { // exponent<0
17             if (base == 0) {
18                 throw new RuntimeException("分母不能为0");
19             }
20             n = -exponent;
21         } else { // exponent==0
22             return 1;
23         }
24 
25         while (n != 0) {
26             if ((n & 1) == 1) {
27                 result *= current;
28             }
29 
30             current *= current;
31             n = n >> 1; // 右移一位
32         }
33 
34         return exponent > 0 ? result : (1 / result);
35     }
36 }

 

posted @ 2016-09-04 22:00  Mr.van_Gogh  阅读(375)  评论(0编辑  收藏  举报