5 条题解

  • 1
    @ 2023-4-22 19:50:28

    一道比较简单的递归题

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    void out(long long x)
    {
        for(int i = 60;i >= 0;i--) //最大2^60(咋可能,我随便蒙的,啥都行,别太小)
        {
            if(pow(2,i) <= x)//如果2的i次方小于x,因为是逆着枚举的,所以这里是在找当2的i次方小于x时,最大的i
    		{
                if(i == 1) //如果是2的一次方不用输出2(1),直接输出2
    			{
    				cout << 2;
    			}
    			
                else if(i == 0)//如果是二的0次方也是直接输出
    			{
    				cout << "2(0)";
    			}
    			
                else//正常情况,还要继续找
    			{
                    cout << "2(";
    	            out(i);//再继续往下搜
    	            cout << ')';
                }
                
                x -= pow(2,i);//x减去这个数
                
                if(x != 0)//如果x减完后居然还有(???),简单地输出一个'+'
    			{
    				cout << '+';
    			}
            }
        }
    }
    
    int main()
    {
    	long long n;//输入,要开long long,别学我还用int
        cin >> n;
        out(n);
        return 0;//返回
    }
    

    信息

    ID
    1226
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    96
    已通过
    53
    上传者