求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;
}

  

posted @ 2021-03-27 20:02  Joelin12  阅读(315)  评论(0)    收藏  举报