在C ++中转换为Base -2

假设我们有一个数字N,我们必须找到一个由“ 0”和“ 1”组成的字符串,该字符串表示其值以2为底(负2)。返回的字符串不应包含前导零,除非该字符串正好是“ 0”。因此,如果输入类似于2,则输出将为“ 110”,因为(-2)^ 2 +(-2)^ 1 +(-2)^ 0 = 2。

为了解决这个问题,我们将遵循以下步骤-

  • ret:=一个空字符串

  • 如果N = 0,则返回“ 0”

  • 当N不为0时

    • 雷姆:= N mod(– 2)

    • N:= N /(-2)

    • 如果rem <0且rem:= rem + 2并将N增加1

    • ret:= ret + rem作为字符串

  • 反转字符串ret

  • 返回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