求x的n次方(二进制)
1.递归实现
#include<iostream> #include<algorithm> #include<cstdio> #define ll long long using namespace std; ll x,n; ll pow(ll x,ll n) { if(n==0) return 1; if(n==1) return x; if(n%2==0) return pow(x,n/2)*pow(x,n/2); else return pow(x,n/2)*pow(x,n/2)*x; } int main() { scanf("%lld%lld",&x,&n); printf("%lld\n",pow(x,n)); return 0; }
2.转换为2进制实现,n转换为2进制,然后与1进行与,如果返回1就相乘,反之则不变。
#include<iostream>
#include<algorithm>
#include<cstdio>
#define ll long long
using namespace std;
ll x,n;
ll pow(ll x,ll n)
{
ll ans=1;
if(n==0)
return 1;
while(n!=0)
{
if(n&1!=0)
ans*=x;
n/=2;
x*=x;
}
return ans;
}
int main()
{
scanf("%lld%lld",&x,&n);
printf("%lld\n",pow(x,n));
return 0;
}
别趴下,熬过黑夜就是黎明
浙公网安备 33010602011771号