สมมติว่าเรามีตัวเลข 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