码迷,mamicode.com
首页 > 其他好文 > 详细

012 数值的整数次方

时间:2019-02-23 21:54:13      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:family   size   快速幂   one   ring   pow   sys   main   print   

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 数值的整数次方

标签:family   size   快速幂   one   ring   pow   sys   main   print   

原文地址:https://www.cnblogs.com/juncaoit/p/10424381.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!