题解 | 数值的整数次方

数值的整数次方

https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00

class Solution {
  public:
    double Power(double base, int exponent) {
        if (base == 0) return 0;
        if (exponent == 0) return 1;
        double ans = 1;
        bool zbase = true, ze = true;
        if (base < 0) {
            zbase = false;
            base = 0 - base;
        }
        if (exponent < 0)    {
            ze = false;
            exponent = 0 - exponent;
        }
        while (exponent) {
            if (exponent % 2 == 1)// exponent&1
                ans *= base;
            base *= base;
            exponent /= 2;//exponent>>1;仅用于2的正整数次幂的整除 
        }
        if(!zbase) ans = 0 - ans;
        if(!ze)    ans = 1.0/ans;
        return ans;
    }
};

很显然快速幂,需要注意处理负数的情形和为0的情形,可以考虑位运算处理取余和整除问题(已注释出)。

最近复习了位运算,位运算的效率比乘除法及求余运算的效率要高很多,修改exponent部分的处理为如下:

while (exponent) {
            if (exponent&1)// exponent&1
                ans *= base;
            base *= base;
            exponent >>= 1;//exponent>>1;仅用于2的正整数次幂的整除 
        }

全部评论

相关推荐

05-12 14:48
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
05-09 12:10
济宁学院 Java
程序员小白条:丰富下简历,有点少了,中小厂反正看运气海投
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务