canvas動畫實戰與效能優化
阿新 • • 發佈:2020-12-13
problem:
計算
a^b的值
啊哈哈,這不有手就行麼,簡單入門紅題,跑個迴圈不就出來了嘛——土蛋
可資料毒瘤小k,給出了下面一個數據
a = 231 , b = 2 31
土蛋瘋了,於是去加工修煉,終於練就快速冪本領,擊敗了了毒瘤小k
快速冪
思路:
舉個例子:
215
step1.ans = 15 個 2 相乘.
step2.ans = 7 個 4 相乘再乘上一個 2.
step3.ans = 3 個 16 相乘再乘上 24.
step4.ans = 1 個 256 乘上 24*16.
從以上的步驟中不難看出,當我們求一個數的n次冪的時候,我們可以將它的兩兩進行配對相乘,
如果有多出來的一個數,則將它乘到答案中,否則繼續配對,直到只剩下一個數為止。
有一個小的注意事項,對答案進行初始化時,初始值應為1而不是0.
結合程式碼更加理解
#include <bits/stdc++.h>
using namespace std;
int main(){
int ans=1,i,j,k,m,n,b;
scanf("%d%d",&b,&m);
while(m > 0){
if(m % 2==1)
ans = ans*b;
b = b*b;
m = m>>1;
}
printf("%d",ans);
return 0;
}