根据n的取值分三种情况,n>0、n==0和n<0,用循环依次累计乘法。
class Solution { public: double myPow(double x, int n) { double mul =1; if(n==0){ return 1; } else if(n>0){ for(int i=0;i<n;i++) mul *=x; } else{ for(int i=0;i>n;i--){ mul *= x; } mul = 1/mul; } return mul; } }; 提交结果为Time Limit Exceeded , 当x=0.00001,n=2147483647时超时。 2、思路二: 分治思想: x^n = x^(n/2) * x^(n/2) * x^(n%2),将x的n次方降幂为n/2,讨论n的奇偶性,如果n为奇数,则多乘一个v。 class Solution { public: double myPow(double x, int n) { if(n==0) return 1; else if(n<0) return 1.0/myPow(x,-n); else { double v=myPow(x,n/2); if(n%2==0) return v*v; else return v*v*x; } } }; 存在问题:x=1.00000,n=-2147483648时,显示Runtime Error。改为如下写法就可以顺利通过: class Solution { public: double myPow(double x, int n) { if(n<0) return 1.0/power(x,-n); else return power(x,n); } private: double power(double x,int n){ if(n==0) return 1; double v=power(x,n/2); if(n%2==0) return v*v; else return v*v*x; } };