快速幂运算

数值的整数次方

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;
    }
};
全部评论

相关推荐

湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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