题目描述
任何一个正整数都可以用 2 的幂次方表示。例如 137=2^7+2 ^3+2 ^0
同时约定方次用括号来表示,即 a^b 可表示为 a(b)。
由此可知,137 可表示为 2(7)+2(3)+2(0)2(7)+2(3)+2(0)
所以最后 137 可表示为
2(2(2)+2+2(0))+2(2+2(0))+2(0)。
所以 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 <limits.h>
#include <string>
using namespace std;
string run(int x)
{
int i=0;
string s="";
if(x==0)return string("0");
do{
if(x&1)s=(i==1?"2":"2("+run(i)+")")+(s==""?"":"+")+s;
}while(i++,x>>=1);
return s;
}
int main()
{
cin>>n;
cout <<run(n)<<endl;
return 0;
}