给两个数,x,n,让你求x的n次幂是多少。
很简单,也很容易,可以用老算法来一遍(也不算是算法,就是模拟一下)
long long pow(long x,long y)
{
for(int i=0;i<=y-1;i++)
{
x*=x;
}
return x;
}
然后接下来就是优化了,比方说2的6次方,我们可以拆分成2的2次方的三次方,也可以拆分成2的三次方的2次方,那么就是下面的优化代码
#include<bits/stdc++.h>
using namespace std;
long long pow(long long x,long long y)
{
long long ans;
if(y==0) return 1;
else
{
while((y&1)==0)//偶数
{
y>>=1;
x*=x;
}
}
ans=x;//目前答案里面存储的是指数恰好为奇数时的乘积
y>>=1;
while(y!=0)
{
x*=x;
if(y&1!=0) ans*=x;
y>>=1;
}
return ans;
}
int main()
{
long long x;
long long y;
cin>>x>>y;
cout<<pow(x,y);
return 0;
}