1 #include "000库函数.h"
2
3
4
5 //使用折半算法 牛逼算法
6 class Solution {
7 public:
8 double myPow(double x, int n) {
9 if (n == 0)return 1;
10 double res = 1.0;
11 for (int i = n; i != 0; i /= 2) {
12 if (i % 2 != 0)
13 res *= x;
14 x *= x;
15 }
16 return n > 0 ? res : 1 / res;
17 }
18
19 };
20
21
22 //同样使用二分法,但是使用递归思想
23 class Solution {
24 public:
25 double myPow(double x, int n) {
26 if (n == 0)return 1;
27 double res = myPow(x, n / 2);
28 if (n % 2 == 0)return x * x;//是偶数,则对半乘了之后再两个大数相乘,x^n==(x^n/2)^2
29 if (n > 0) return res * res * x;
30 return res * res / x;
31 }
32 };
33
34 void T050() {
35 Solution s;
36 double x;
37 int n;
38 x = 0.0001;
39 n = 2147483647;
40 cout << s.myPow(x, n) << endl;
41 x = 2.1;
42 n = 3;
43 cout << s.myPow(x, n) << endl;
44 x = 2;
45 n = -2;
46 cout << s.myPow(x, n) << endl;
47 x = 0.9;
48 n = 2147483647;
49 cout << s.myPow(x, n) << endl;
50
51
52 }