题目描述
任何一个正整数都可以用 2 的幂次方表示。例如 。
同时约定方次用括号来表示,即 ab 可表示为 a(b)。
由此可知,137 可表示为 2(7)+2(3)+2(0)
进一步:
7=22+2+20 ( 21 用 2 表示),并且 3=2+20。
所以最后 137 可表示为 2(2(2)+2+2(0))+2(2+2(0))+2(0)。
又如 1315=210+28+25+2+1
所以 1315 最后可表示为 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)。
输入格式
一行一个正整数 n。
输出格式
符合约定的 n 的 0,2 表示(在表示中不能有空格)。
样例 #1
样例输入 #1
样例输出 #1
1
| 2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
|
提示
【数据范围】
对于 100% 的数据,1≤n≤2×104。
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
#include<iostream> #include<cmath> using namespace std; void loop(int a){ for(int i=14;i>=0;i--){ if(pow(2,i)<=a){ if(i==1) cout<<"2"; else if(i==0) cout<<"2(0)"; else{ cout<<"2("; loop(i);
cout<<")"; } a-=pow(2,i); if(a){ cout<<"+"; } } } } int main(){ int a; cin>>a; loop(a); cout<<endl; return 0; }
|
参考
《题解 P1010 【幂次方】》——_xcc_ 的博客