标签:curr exponent double base2 整数 012 base base4 次方
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 }
标签:curr,exponent,double,base2,整数,012,base,base4,次方 来源: https://www.cnblogs.com/juncaoit/p/10424381.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。