首页 > 代码库 > 洛谷 P1010 幂次方 Label:模拟

洛谷 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

我这应该不算打表吧?

 

洛谷 P1010 幂次方 Label:模拟