012 数值的整数次方

Posted juncaoit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了012 数值的整数次方相关的知识,希望对你有一定的参考价值。

1.题目

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

 

2.思路

   a11=a(2^0+2^1+2^3)

  以b==11为例,b=>1011,二进制从右向左算,但乘出来的顺序是 a^(2^0)*a^(2^1)*a^(2^3),是从左向右的。我们不断的让base*=base目的即是累乘,以便随时对ans做出贡献。

  其中要理解base*=base这一步:因为 base*base==base2,下一步再乘,就是base2*base2==base4,然后同理  base4*base4=base8,由此可以做到base-->base2-->base4-->base8-->base16-->base32.......指数正是 2^i ,再看上面的例子,a11= a1*a2*a8,这三项就可以完美解决了,快速幂就是这样。

 

3.程序

 1 package first;
 2 
 3 public class Power {
 4     public static void main(String[] args){
 5         double a=Power(3,5);
 6         System.out.println("a="+a);
 7     }
 8 
 9     //1  0  1
10     //3^(2^2)  *  3^(2^0)
11     //
12     public static double Power(double base, int exponent) {
13         double res = 1;
14         double curr = base;
15         while(exponent!=0){
16             if((exponent&1)==1)
17                 res=res*curr;
18             //这个是2的指数,不管这个位置是不是0,都进行加权
19             curr=curr*curr;
20             exponent>>=1;// 右移一位
21         }
22         return res;
23     }
24 }

 

以上是关于012 数值的整数次方的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer 12.数值的整数次方

16 数值的整数次方 (第3章 高质量的代码)

剑指offer数值的整数次方

算法:数值的整数次方

算法:数值的整数次方

数值的整数次方-剑指Offer