สมมติว่าเรามีตัวเลข N เราต้องหาสตริงที่ประกอบด้วย "0" และ "1" ซึ่งแทนค่าในฐาน -2 (ลบสอง) สตริงที่ส่งคืนไม่ควรมีเลขศูนย์นำหน้า เว้นแต่สตริงจะเป็น "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
-
รีเทิร์น.
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#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