숫자 N이 있다고 가정하고 밑수 -2(음수 2)에서 값을 나타내는 "0"과 "1"로 구성된 문자열을 찾아야 합니다. 문자열이 정확히 "0"이 아닌 경우 반환된 문자열에는 선행 0이 없어야 합니다. 따라서 입력이 2와 같으면 출력은 (-2)^2 + (-2)^1 + (-2)^0 =2와 같이 "110"이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
ret :=빈 문자열
-
N =0이면 "0"을 반환합니다.
-
N이 0이 아닌 동안
-
rem :=N 모드(– 2)
-
N :=N / (-2)
-
rem <0이고 rem :=rem + 2이고 N을 1만큼 증가
-
ret :=ret + rem을 문자열로
-
-
ret 문자열 반전
-
반환 반환.
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h> using namespace std; class Solution { public: string baseNeg2(int N) { string ret = ""; if(N == 0) return "0"; while(N){ int rem = N % (-2); N /= -2; if(rem < 0) rem += 2, N++; ret += to_string(rem); } reverse(ret.begin(), ret.end()); return ret; } }; main(){ Solution ob; cout << (ob.baseNeg2(17)); }
입력
17
출력
10001