1 #INCLUDE <. 비트 / stdc ++ H> 2 사용 스페이스 성병; 3 #DEFINE _for는 (ⅰ, A는 B)에 대한 (; 나는 B <I가 ++ I = (a) INT) 4 5 문자열 F ( INT의 b) (6) { 도 7 의 경우 (b의 == 1 ) 8 복귀 " 1 " ; (9) 그 밖의 경우 (b의 == 0 ) 10 리턴 " 0 " ; 11 12 스트링 BI; 13 일 동안 (b) 14 { 15 의 경우 (b 및 0x1로 ) 16 바이 + = ' 1 ' ; 17 다른 BI + = ' 0 ' ; 18 B >> = 1 ; 19 } 20 21 스트링 RNT; 22 INT의 N = bi.size (); 23 리버스 (bi.begin () bi.end ()); 24 _for (I, 0 , N) 25 { 26 일 경우 (BI [I] == ' 1 ' ) 27 { 28 RNT + = " 2 ( " ; 29 RNT + = F (NI- 1 ) 30 RNT + = ' ) ' ; (31) } (32) 의 경우 (! I = N- 1 ) 33 RNT + = ' + ' ; 34 } 35 36 복귀 RNT; 37 } 38 39 공극 워시 ( 문자열 및 RNT) 40 { 41 _for (I, 0, rnt.size ()) 42 { 43 의 경우 (RNT [I] == ' ( ' && RNT [난 + 1 ] == ' 1 ' ) 44 rnt.erase (난 -, 3 ), (45) 의 경우 (RNT [I ] == ' + ' && (RNT [I + 1 ] == ' + ' || RNT [내가 + 1 ] == ' ) ' )) 46 rnt.erase (난 ..., 1 ); (47) } (48) 의 경우 (RNT [rnt.size () - 1 ] ==' + ' ) 49 rnt.erase (rnt.size () - 1 , 1 ); 50 } 51 52 INT 주 () 53 { 54 INT a 및 55 는 scanf ( " %의 D " , & A ); 56 문자열 RNT = F (a); (57) 세정 (RNT); 58 COUT << RNT << ENDL; 59 반환 0 ; 60 }