P1010 幂次方

这个题看起来十分的复杂,不过读完题就发现这题其实就是个递归(虽然我递归这块学的不好( ̄▽ ̄)")

这题就是把一个数分成二的几次方的和,然后余数和比它小的最大的二的次方数,如果不是二的一次方或者二的零次方,就要接着递归。

感觉写起来会很复杂啊。

直接上代码吧:

#include<iostream>
#include<cmath>
using namespace std;
int n;
void dg(int x)
{
    for(int i=14;i>=0;i--)
    {
        if(pow(2,i)<=x)
        {
            if(i==1)//这样就说明n是2或者3,就不需要输出括号了
            {
                cout<<"2";
            }
            else if(i==0)
            {
                cout<<"2(0)";//这样就说明n是1    
            }
            else
            {
                cout<<"2(";
                   dg(i);
                cout<<")";
            }
            x-=pow(2,i);//取余
            if(x!=0)//有余数时就输出+号
            {
                cout<<"+";
            }
        }
    }
}
int main()
{
    cin>>n;
    dg(n);
    return 0;
}

愉快的过了这题O(∩_∩)O

原文地址:https://www.cnblogs.com/zjylzf/p/12896302.html