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)^229 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 }