洛谷 P1010 幂次方 Label:模拟
题目描述
任何一个正整数都可以用2的幂次方表示。例如
137=2^7+2^3+2^0
同时约定方次用括号来表示,即a^b 可表示为a(b)。
由此可知,137可表示为:
2(7)+2(3)+2(0)
进一步:7= 2^2+2+2^0 (2^1用2表示)
3=2+2^0
所以最后137可表示为:
2(2(2)+2+2(0))+2(2+2(0))+2(0)
又如:
1315=2^10 +2^8 +2^5 +2+1
所以1315最后可表示为:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
输入输出格式
输入格式:
一个正整数n(n≤20000)。
输出格式:
符合约定的n的0,2表示(在表示中不能有空格)
输入输出样例
输入样例#1:
1315
输出样例#1:
2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)
代码
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #define inf 0x3f3f3f3f 7 #define ll long long 8 using namespace std; 9 int n; 10 void trans(int i){ 11 if(i==14) cout<<"2(2(2+2(0))+2(2)+2)"; 12 if(i==13) cout<<"2(2(2+2(0))+2(2)+2(0))"; 13 if(i==12) cout<<"2(2(2+2(0))+2(2))"; 14 if(i==11) cout<<"2(2(2+2(0))+2+2(0))"; 15 if(i==10) cout<<"2(2(2+2(0))+2)"; 16 if(i==9) cout<<"2(2(2+2(0))+2(0))"; 17 if(i==8) cout<<"2(2(2+2(0)))"; 18 if(i==7) cout<<"2(2(2)+2+2(0))"; 19 if(i==6) cout<<"2(2(2)+2)"; 20 if(i==5) cout<<"2(2(2)+2(0))"; 21 if(i==4) cout<<"2(2(2))"; 22 if(i==3) cout<<"2(2+2(0))"; 23 if(i==2) cout<<"2(2)"; 24 if(i==1) cout<<"2"; 25 if(i==0) cout<<"2(0)"; 26 } 27 int main(){ 28 cin>>n; 29 while(n>0){ 30 for(int i=14;i>=0;i--){ 31 int k=pow(2,i); 32 if(k<=n){ 33 trans(i); 34 n-=k; 35 if(n>0) cout<<'+'; 36 break; 37 } 38 } 39 } 40 return 0; 41 }注
2^14=16384
2^15=32768
我这应该不算打表吧?
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!