【力扣】面试题16. 数值的整数次方

题意理解

计算一个数的整数次方,提供的有益帮助是结果不会超过范围,限制条件是不能用库函数

问题分析

考虑负数,0的情况,考虑效率,复杂度o(n)是不行的,需要改成o(lgn)。

其他

https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/solution/c-cheng-fa-kuai-su-mi-by-yizhe-shi/

链接

class Solution {
public:
    double myPow(double x, int n) {
        if (x == 0.0 && n < 0) {
            return 0;
        }
        long num = n;  //防止出现负数转正数越界的错误。
        bool minusflag = 0;
        if (n < 0) {
            minusflag = 1;
            num = -num;   //不能直接从int转到负数long,需要int转成long,从long转到负数long
        }
        double pow = 1.0;
        while (num) {
            if (num & 1) pow *= x;
            x *= x;    //不是逐个乘一个数,而是对折乘
            num >>= 1;
            //cout << "n " << n << endl;
        }
        if (minusflag == 1) {
            pow = 1.0 / pow;
        }
        return pow;
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值