• 剑指 Offer 16. 数值的整数次方


    思路

    二分求幂模板题。注意边界-2147483647的处理。

    二分求幂的算法见: https://www.cnblogs.com/FengZeng666/p/11484835.html

    代码实现

     1 class Solution {
     2 public:
     3     double myPow(double x, int n) {
     4         double res = 1;
     5         double m = x;
     6         int flag = 0;
     7         
     8         // 为了防止int存不下2147483648,可以先算x的-2147483647次方,最后再除以-x
     9         // 这里采取提前把n转为long long的方式也是可以的
    10         if(n < 0) {
    11             if(n == -2147483648){
    12                 flag = 2;
    13                 n = 2147483647;
    14             } else {
    15                 flag = 1;
    16                 n = -n;
    17             }
    18         }
    19 
    20         //二分求幂
    21         while(n > 0) {
    22             if((n & 1) == 1) 
    23                 res *= m;
    24             n >>= 1;
    25             m *= m;
    26         }
    27 
    28        if(flag > 0) {
    29            res = 1.0/res;
    30            if(flag == 2) {
    31                res /= x;
    32            }
    33        }
    34         
    35         return res;
    36     }
    37 };

    复杂度分析

  • 相关阅读:
    Java第一次作业
    第十一次作业
    第十次作业
    第九次作业
    第五次作业
    第四次作业
    第三次作业
    第二次作业
    Java23种设计模式
    第三次作业
  • 原文地址:https://www.cnblogs.com/FengZeng666/p/13859179.html
Copyright © 2020-2023  润新知