8、2的幂次方(Noip1998) 【问题描述】 任何一个正整数都可以用2的幂次方表示。例如: 137=27+23+20 同时约定方次用括号来表示,即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≤20000) 【输出格式】 符合约定的n的0,2表示(在表示中不能有空格) 【输入样例】 137 【输出样例】 2(2(2)+2+2(0))+2(2+2(0))+2(0)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #define N 1000010 using namespace std; void calculate(int n,int step) { if(n==0) return; calculate(n/2,step+1); if(n%2) { if(n/2) cout<<"+"; if(step==1) cout<<"2"; else { cout<<"2("; if(step==0) cout<<"0"; else calculate(step,0); cout<<")"; } } } int main() { int n; cin>>n; calculate(n,0); cout<<endl; return 0; }