本文共 538 字,大约阅读时间需要 1 分钟。
自己写了一个快速幂,不过只能解决整数次幂的,貌似没bug,时间复杂度为logn。
思路: ab,b总的有3种情况: 1.b=0,ab=1; 2.b=1,ab=a; 3.b>1: A.b为偶数,则ab=(a2)b/2=((a2)2)b/2/2=…,直到指数为1; B.b为奇数,则ab=a·ab-1=a·(a2)(b-1)/2重复A,B操作,直到指数为1。 代码如下:#includeusing namespace std;long long quick_pow(long long x,long long y){ if(y==1) return x; if(y==0) return 1; //1,2两种情况的代码一定要放在第3种情况之前 if(y%2==0) return quick_pow(x*x,y/2); if(y%2!=0) return x*quick_pow(x*x,y/2);}int main(){ long long x,y; long long ans; while(1){ scanf("%lld %lld",&x,&y); ans=quick_pow(x,y); printf("%lld\n",ans);} return 0;}
转载地址:http://kfdci.baihongyu.com/