Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 Base -2로 변환

<시간/>

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