zoukankan      html  css  js  c++  java
  • 【位运算】数值的整数次方

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

     1 /**
     2  * 1.全面考察指数的正负、底数是否为零等情况。
     3  * 2.写出指数的二进制表达,例如13表达为二进制1101。
     4  * 3.举例:10^1101 = 10^0001*10^0100*10^1000。
     5  * 4.通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果。
     6  */
     7 public class Solution {
     8     public double Power(double base, int exponent) {
     9 
    10         double result = 1;
    11         double current = base;
    12         int n = 0; // exponent绝对值
    13 
    14         if (exponent > 0) { // exponent>0
    15             n = exponent;
    16         } else if (exponent < 0) { // exponent<0
    17             if (base == 0) {
    18                 throw new RuntimeException("分母不能为0");
    19             }
    20             n = -exponent;
    21         } else { // exponent==0
    22             return 1;
    23         }
    24 
    25         while (n != 0) {
    26             if ((n & 1) == 1) {
    27                 result *= current;
    28             }
    29 
    30             current *= current;
    31             n = n >> 1; // 右移一位
    32         }
    33 
    34         return exponent > 0 ? result : (1 / result);
    35     }
    36 }
  • 相关阅读:
    codeforces-1144 (div3)
    codeforces-1142 (div1)
    codeforces-1131 (div2)
    codeforces-1132 (div2)
    [HAOI2006]均分数据
    Ellipsoid
    [JSOI2004]平衡点 / 吊打XXX
    CF208E Blood Cousins
    CF570D Tree Requests
    CF600E Lomsat gelral
  • 原文地址:https://www.cnblogs.com/jiangyi-uestc/p/5840484.html
Copyright © 2011-2022 走看看