在 C++ 中转换为负二进制


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

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

  • ret := 一个空字符串

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

  • 当 N 非 0 时

    • rem := 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

更新于: 30-4 月-2020

1K+ 浏览

开启职业生涯

完成课程,获得认证

开始
广告
© . All rights reserved.