zoukankan      html  css  js  c++  java
  • 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 ,再看上面的例子,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 }
  • 相关阅读:
    python开发必备:virtualenv虚拟环境(自用)
    JavaScript经典实例
    javascript事件驱动及事件处理
    在HTML网页中嵌入脚本的方式
    JavaScript数据结构
    JavaScript语言调试技巧
    CSS+DIV布局
    在HTML文档中应用CSS
    CSS常用属性
    定义CSS
  • 原文地址:https://www.cnblogs.com/juncaoit/p/10424381.html
Copyright © 2011-2022 走看看