No.50 Pow

    xiaoxiao2021-03-25  92

    1、思路一:

    根据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; } };

    转载请注明原文地址: https://ju.6miu.com/read-25353.html

    最新回复(0)