快速设计一个高效的求n次幂的算法:
思路:翻倍求解
#include<iostream>
using namespace std;
//普通求一个数的幂的方法
int pow0(int a,int n){
int res=1;
for(int i=0;i<n;i++){
res*=a;
}
return res;
}
//优化的求法
int pow(int a,int n){
if(n==0) return 1;
int res=a;
int ex=1;
while((ex<<1)<n){ //指数试翻倍
res*=res; //结果翻倍
ex<<=1; //对应指数也翻倍
}
return res*pow(a,(n-ex)); //递归求解a的(n-ex)次方
}
int main(){
cout<<pow0(2,0)<<endl;
cout<<pow(2,3);
return 0;
}