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

โปรแกรมเรียกซ้ำแปลงเลขฐานสองเป็นฐานสิบใน C++

ภาพรวม

ได้รับสตริงที่มีเลขฐานสอง (Binary) เป้าหมายคือหาเลขฐานสิบ (Decimal) เทียบเท่าโดยใช้วิธีการเรียกซ้ำ (Recursive)

การแปลงฐานสองเป็นฐานสิบ: เดินจาก LSB (Least Significant Bit) ไป MSB คูณแต่ละบิตด้วย 2i โดย 0≤i<จำนวนหลัก บวกผลลัพธ์ก่อนหน้า

ตัวอย่าง

อินพุต − binStr[] = "110010"

เอาต์พุต − Equivalent Decimal of given binary: 50

คำอธิบาย −

= 0×20 + 1×21 + 0×22 + 0×23 + 1×24 + 1×25

= 0 + 2 + 0 + 0 + 16 + 32 = 50

อินพุต − binStr[] = "0011"

เอาต์พุต − Equivalent Decimal of given binary: 3

คำอธิบาย −

= 1×20 + 1×21 + 0×22 + 0×23 = 1 + 2 + 0 + 0 = 3

แนวทางการแก้ปัญหา

ใช้ฟังก์ชันเรียกซ้ำ bintoDecimal(strBin, length) รับสตริงและความยาว สำหรับแต่ละตัวอักษร แปลงเป็นค่าทศนิยม คูณด้วย 2i บวกผลลัพธ์จากตัวถัดไป

  • รับสตริง strBin[] ที่มีเลขฐานสอง
  • คำนวณความยาวด้วย strlen(strBin)
  • ฟังก์ชัน bintoDecimal(char binary[], int len, int i=0) คืนค่าทศนิยม
  • Base case: หากอยู่ที่ตัวสุดท้าย (LSB) คืนค่า binary[i] - '0' (คูณ 1 = 20)
  • มิฉะนั้น temp = binary[i] - '0' คูณ temp <<= len-i-1 (เทียบเท่า ×2len-i-1)
  • บวกผลลัพธ์ตัวถัดไป temp += bintoDecimal(binary, len, i+1)
  • คืนค่า temp
  • พิมพ์ผลลัพธ์ใน main

ตัวอย่างโค้ด C++

#include <bits/stdc++.h> 
using namespace std; 

int bintoDecimal(char binary[], int len, int i = 0){ 
    if (i == len - 1) 
        return (binary[i] - '0'); 
    int temp = binary[i] - '0'; 
    temp = temp << (len - i - 1); 
    temp = temp + bintoDecimal(binary, len, i + 1); 
    return (temp); 
} 

int main(){ 
    char strBin[] = "11010"; 
    int length = strlen(strBin); 
    cout << "Equivalent Decimal of given binary: " << bintoDecimal(strBin, length) << endl; 
    return 0; 
}

ผลลัพธ์

Equivalent Decimal of given binary: 26