快速幂运算
数值的整数次方
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; } };