leetcode 50. Pow(x, n) 快速幂

地址:https://leetcode-cn.com/problems/powx-n/
实现Math.pow(n,x);

暴力是直接相乘,则需要进行n次。将n转为2进制,需要获得每次的基数base,但最多只需要logn次相乘就可获得全部的base。

转为2进制可能是基数好算一些?

java中int的极限,0-2147483648 = -2147483648,所以需要用long

class Solution {
    public double myPow(double x, int n) {
        double r = 0;
        long N = n;// !!!!!
        //while(n>1)
        if(n>0)
        r = f(x,n);
        else
        r = 1/ f(x,-N);
        return r;
    }

    private double f(double x,long n){
        double  r = 1;
        double s =x;
        while(n>0){
            if( (n&1) == 1){ // (n&1) 需要加括号
                r = r*s;
            }
            s = s *s;// 需要不断相乘,获得基数base
            n = n >>1;
        }
        return r;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值