解法:浮点数快速幂的应用
快速幂的思想就是倍增的思想
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;
}
标签:code,20,思想,double,long,qmi,res,return,快速 From: https://www.cnblogs.com/FJCLJ/p/18161971