首页 > 代码库 > 洛谷 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:模拟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。