숫자 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