快速幂的思想和code实现

 

解法:浮点数快速幂的应用

快速幂的思想就是倍增的思想

5的20次方

如果是一次一次乘需要5*5*5*5*5*5……… 20次乘法

快速幂就是 20(10)=00010100(2)

20=4+16

所以原来的就变成了:

(a)(*)(a)a2

(a*a) (*) (a*a) a4

((a*a)*(a*a)) (*) ((a*a)*(a*a)) a8

(((a*a)*(a*a)) * ((a*a)*(a*a)))  (*) (((a*a)*(a*a)) * ((a*a)*(a*a))) a16

(a16)(*)(a4)

总共5次运算

20------》5

#include <bits/stdc++.h>

using namespace std;

class Solution {

   private:

      double qmi(double a, long long b) {

          double  res = 1.0;

          while (b) {

             if (b & 1)

                res = res * 1ll * a;

             a = a * 1ll * a;

             b >>= 1;

          }

          return res;

      }

   public:

      double myPow(double x, int n) {

          long long N = n;

          return N >= 0 ? qmi(x, N) : 1.0 / qmi(x, -N);

      }

};

int main() {

   Solution s;

   auto res = s.myPow(5, 20);

   printf("%.6lf", res);

   return 0;

}

posted on 2024-04-27 13:45  不是小朋友L  阅读(2)  评论(0编辑  收藏  举报

导航