P1010-幂次方

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define _for(i,a,b) for(int i = (a);i < b;i ++)
 4 
 5 string f(int b)
 6 {
 7     if(b==1)
 8         return "1";
 9     else if(b==0)
10         return "0";
11 
12     string bi;
13     while(b)
14     {
15         if(b&0x1)
16             bi += '1';
17         else bi += '0';
18         b >>= 1;
19     }
20     
21     string rnt;
22     int n = bi.size();
23     reverse(bi.begin(),bi.end());
24     _for(i,0,n)
25     {
26         if(bi[i]=='1')
27         {
28             rnt += "2(";
29             rnt += f(n-i-1);
30             rnt += ')';
31         }
32         if(i!=n-1)
33             rnt += '+';
34     }
35     
36     return rnt;
37 }
38 
39 void wash(string& rnt)
40 {
41     _for(i,0,rnt.size())
42     {
43         if(rnt[i]=='('&&rnt[i+1]=='1')
44             rnt.erase(i--,3);
45         if(rnt[i]=='+'&&(rnt[i+1]=='+'||rnt[i+1]==')'))
46             rnt.erase(i--,1);
47     }
48     if(rnt[rnt.size()-1]=='+')
49         rnt.erase(rnt.size()-1,1);
50 }
51 
52 int main()
53 {
54     int a;
55     scanf("%d",&a);
56     string rnt = f(a);
57     wash(rnt);
58     cout << rnt << endl;
59     return 0;
60 }

 

posted @ 2019-07-28 10:39  Asurudo  阅读(194)  评论(0编辑  收藏  举报