快速幂的运算

本文介绍了快速幂运算的实现代码,用于解决LeetCode第50题。在处理负数和异常数值时,需要特别考虑,如将负数的底数变为倒数。同时,代码中进行了相应的边界条件检查。提供的解决方案能够处理各种输入情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述快速幂运算代码。有点绕,建议多看几遍理解

int poww (int a, int b) {
    int base = a, ans = 1;
    while (b) {
        if (b & 1) ans *= base;
        base *= base;
        b >>= 1;
    }
    return ans;
}

运用此算法可以解决leetcode50题:
在这里插入图片描述在这里插入图片描述
这里的测试用例会输入负数和一些奇奇怪怪的边角料数字,对于负数很好办,只需要将base变为倒数就好了。对于那些奇葩的边角料数字,只能一个个排除
代码如下:

class Solution {
public:
    double myPow(double x, int n) 
    {
        if(x<0 && n<0) return 1;
        if(x==1) return x;
        double ans=1;
        double base=x;
        if(n<0)
        {
            if ( n <= INT_MIN)
                n=INT_MAX;
            else
                n=-n;
                base=1/base;
        }
        while(n!=0)
        {
            if(n&1)
                ans*=base;
            base*=base;
            n>>=1;
        }
        return ans;
    }
};

参考文章:
https://mp.weixin.qq.com/s?__biz=MzI4MzUxNjI3OA==&mid=2247485590&idx=1&sn=e3f13aa02fed4d4132146e193eb17cdb&chksm=eb88c48fdcff4d99b44d537459396589b8987f89a8c21085a945ca8d5e2b0b140c13aef81d91&token=1223087516&lang=zh_CN#rd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值