码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷 P1010 幂次方 Label:模拟

时间:2016-08-26 18:36:00      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

题目描述

任何一个正整数都可以用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:模拟

标签:

原文地址:http://www.cnblogs.com/radiumlrb/p/5811186.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!