Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

แปลงเป็นฐาน -2 ใน C++


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