一、問題提出
求
二、問題研究
2.1 常規算法
= 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3
需要算14次,太麻煩,不符合程序員的逼格
2.2 快速冪
= = 1 * + 1 * + 0 * + 1 *
=
= * *
需要算7次,方便運算
推導過程
=
=
=
=
快速冪就是運算過程不斷對底數進行平方運算,並當指數的二進制某位爲 1 時,保存當前底數的值
2.3 代碼實現
代碼實現
typedef long long ll;
//a爲底數,b爲指數
ll fastPower(int a,int b) {
if(b==0) {
return 1;
}
//res用來保存結果
ll res = 1;
while(b) {
//指數當前位爲1時,保存底數的值
if(b&1) {
res*=a;
}
//判斷指數的下一位
b>>=1;
//底數做平方運算
a*=a;
}
return res;
}
運行結果:
b&1 表示b與1進行按位與操作,若b當前二進制位爲1則結果爲1;同時若b爲奇數時,該操作結果也爲1
>> 表示位移運算