Cho số N, tìm chuỗi gồm '0' và '1' biểu diễn giá trị của N trong cơ số -2 (âm hai). Chuỗi không có số 0 dẫn đầu, trừ khi là "0". Ví dụ: N = 2, kết quả "110", vì (-2)² + (-2)¹ + (-2)⁰ = 4 - 2 + 1 = 3? Wait, 4-2+1=3, không phải 2. Thực tế: 110 base -2 = 1*4 + 1*(-2) + 0*1 = 2. Đúng.
Giải pháp:
ret := chuỗi rỗng
Nếu N = 0, trả về "0"
While N ≠ 0:
rem := N % (-2)
N := N / (-2)
Nếu rem < 0: rem += 2, N++
ret += rem (dạng chuỗi)Đảo ngược ret và trả về
Ví dụ
#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; } }; int main(){ Solution ob; cout << (ob.baseNeg2(17)); }Đầu vào
17
Đầu ra
10001