50. Pow(x,n)

题目:

解答:

主要是求 n > 0 n > 0 n>0 的情况的计算,其他时候,可以通过转换得到。

n > 0 n > 0 n>0 的情况下,

n = a 0 2 0 + a 1 2 1 + a 2 2 2 … a m 2 m n = a_0 2^0 + a_1 2^1 + a_2 2^2 \ldots a_m 2^m n=a020+a121+a222am2m

x n = x a 0 2 0 + a 1 2 1 + a 2 2 2 … a m 2 m x^n = x^{a_0 2^0 + a_1 2^1 + a_2 2^2 \ldots a_m 2^m} xn=xa020+a121+a222am2m

​ 故可以拆开递归求解

代码:

class Solution {
public:
    double myPow(double x, int n) {
        if( n == 0 )    return 1;
        else if( n > 0 )    {
            double ans = 1.0;
            while( n > 0 )  {
                if( n % 2 == 1 ) 
                    ans *= x;
                x = x * x;
                n = n / 2;
            }
            return ans;
        }
        else if( n == -2147483648 )
            return 1.0 / ( myPow( x,2147483647 ) * x );
        else 
            return 1.0 / myPow( x,-n );
    }
};

更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值