1. 程式人生 > >快速冪&快速乘法

快速冪&快速乘法

代碼 sin return scanf amp 整理 相加 clas strong

盡管快速冪與快速乘法好像扯不上什麽關系,但是東西不是很多,就一起整理到這裏吧

快速冪思想就是將ax看作x個a相乘,用now記錄當前答案,然後將指數每次除以2,然後將當前答案平方,如果x的2進制最後一位為1的話,就將答案乘以現在的數。快速乘法類似,只是將a*x看作x個a相加。

代碼

  

 1 #include<cstdio>
 2  #include<iostream>
 3  using namespace std;
 4  int mi(int a,int x)
 5   {
 6      int ans=1;
 7      for(int
now=a;x>=1;x>>=1,now=now*now)//a表示底數,x表示次數 8 { 9 if(x&1) ans=ans*now; 10 } 11 return ans; 12 } 13 int cheng(int a,int x)//表示a*x 14 { int ans=0; 15 for(int now=a;x>=1;now=now*2,x>>=1) 16 { 17 if(x&1) ans=ans+now;
18 } 19 return ans; 20 } 21 int main() 22 { 23 int a,x; 24 scanf("%d%d",&a,&x); 25 printf("快速冪 %d\n",mi(a,x)); 26 printf("快速乘法 %d\n",cheng(a,x)); 27 return 0; 28 }

快速冪&快速乘法