1. 程式人生 > 其它 >2的冪次方

2的冪次方

技術標籤:遞迴演算法

【題目】:

每個正數都可以用指數表示表格。用於例如,137=2^7+2^3+2^0。我們用 a(b) 的形式表示a^b,然後用2(7)+2(3)+2(0)表示137。由於7=2^2+2+2^0和3=2+2^0,

137最終由2(2(2)+2+2(0))+2(2+2(0))+2(0)表示。給定一個正數n,你的任務是用只包含數字0和2的指數形式表示n。

示例1

輸入

1315

輸出

2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)

程式碼:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string changefrom(int n)//把數字變成二進位制
{
    string str="";
    while(n!=0)
    {
        str.insert(0,1,n%2+'0');
        n/=2;
    }
    return str;
}
int shuchu(int n)
{
    string s;
    int num=0;
    s=changefrom(n);
    for(int i=0;i<s.size();i++)//用num記錄'1'的個數
    {
        if(s[i]=='1')
           num++;
    }
    
    if(n==2||n==0||n==1)
    {
        if(n!=1)
           cout<<n;
    }
    else{
        int m=0;
        for(int i=0;i<s.size();i++)
        {
           if(s[i]=='1')
           {
              m++;
              cout<<"2";
              if(s.size()-1-i!=1)
                  cout<<'(';
              shuchu(s.size()-1-i);//shuchu(s.size()-1-i);
              if(s.size()-1-i!=1)
                  cout<<')';
              if(m!=num)
                 cout<<"+";
           }
        }
    }
    return 0;
}
int main()
{
    int n;
    while(cin>>n)
    {
        shuchu(n);
        cout<<endl;
    }
    return 0;
}