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 ,再看上面的例子,a¹¹= 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 }