http://lx.lanqiao.cn/problem.page?gpid=T72
- #include <iostream>
- using namespace std;
- int n;
- void print(int n)
- {
- bool flag=false;
- for(int i=30;i>=0;i--)
- {
- int c=(n>>i)&1;//从高位开始
- if(c)
- {
- //前面有表达式就有加号
- if(flag)
- printf("+");
- if(i==1)
- printf("2");
- else if(i==0)
- printf("2(0)");
- else
- {
- printf("2(");
- print(i);
- printf(")");
- }
- if(flag==false)
- flag=true;
- }
- }
- }
- int main()
- {
- while(cin>>n)
- {
- print(n);
- printf("\n");
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-1980891.html