假设我们有一个数字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