/**
* @author nuo
* @version 1.0
* @description: TODO LeetCode 50
* @date 2021/12/10 13:19
*//*
* 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。
* 示例 1:
* 输入:x = 2.00000, n = 10
* 输出:1024.00000
* 示例 2:
* 输入:x = 2.10000, n = 3
* 输出:9.26100
* 示例 3:
* 输入:x = 2.00000, n = -2
* 输出:0.25000
* 解释:2-2 = 1/22 = 1/4 = 0.25
*
* 提示:
* -100.0 < x < 100.0
* -231 <= n <= 231-1
* -104 <= xn <= 104
*/publicclass day07 {// 0_0publicstaticdoublemyPow1(double x,int n){returnMath.pow(x,n);}// 栈溢出 291/304publicstaticdoublemyPow2(double x,int n){if(n ==0){return1.0;}else{if(n <0){
n =- n;
x =1/ x;}return x *myPow2(x, n -1);}}// 超时 301/304publicstaticdoublemyPow3(double x,int n){if(x ==1.0|| n ==0){return1.0;}if(n <0){
x =1.0/ x;
n =-n;}double sum = x;for(int i =0; i < n -1; i++){
sum *= x;}return sum;}// 试图改进,依旧超时 301/304publicstaticdoublemyPow4(double x,int n){if(x ==1.0|| n ==0){return1.0;}if(n <0){
x =1.0/ x;
n =- n;}
n--;double sum = x;if(n %2==1){for(int i =0; i <((n -1)/2); i ++){
sum *= x;}
sum = sum * sum ;}else{for(int i =0; i <(n /2); i++){
sum *= x ;}
sum = sum * sum / x;}return sum;}// 甚至超时291/304 ,开始离谱publicstaticdoublemyPow5(double x,int n){if(n ==0|| x ==1){return1.0;}if(x ==0){return0;}if(n ==1){return x;}if(n <0){
x =1/ x;
n =-n;}if(n %2==0){returnmyPow5(x,n/2)*myPow5(x,n/2);}else{returnmyPow5(x,n/2)*myPow5(x,n/2+1);}}// 别人帮忙的版本 304 / 304publicdoublemyPow6(double x,int n){longN= n;returnN>=0?quickMul(x,N):1.0/quickMul(x,-N);}publicdoublequickMul(double x,longN){if(N==0){return1.0;}double y =quickMul(x,N/2);returnN%2==0? y * y : y * y * x;}}