快速幂运算

数值的整数次方

https://www.nowcoder.com/practice/1a834e5e3e1a4b7ba251417554e07c00?tpId=13&tqId=11165&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tPage=1

#include<iostream>
#include<cmath>
using namespace std;
int main(void)
{
   int m, n;
   cin>>m>>n;
   int result=1;
   while(n)
   {
       if(n%2==1) result=result*m;
       m=m*m;
       n=n/2;
   }
   cout<<result;
}

相当于不断地把幂除以2,则底数变为原来的平方;幂为偶数直接除二,幂为奇数减一再除二同时将减出来的底数的一次方也要乘上;最后是两个一次幂相乘
将n%2==1用与运算, n=n/2用位运算可以优化代码

class Solution {
public:
    double Power(double base, int exponent) {
        int n=abs(exponent);
        double result=1.0;
        while(n)
        {
            if(n&1) result=result*base;
            base=base*base;
            n>>=1;
        }
        if(exponent>0) return result;
        else return 1/result;
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务