Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình đệ quy chuyển nhị phân sang thập phân trong C++


Cho một chuỗi chứa số nhị phân. Mục tiêu là tìm số thập phân tương đương bằng phương pháp đệ quy.

Số nhị phân chuyển sang thập phân: Duyệt từ LSB (bit thấp) đến MSB (bit cao), nhân mỗi bit với 2^i (0≤i≤số bit) và cộng dồn.

Các trường hợp đầu vào/đầu ra

Đầu vào - binStr[] = "110010"

Đầu ra - Thập phân tương đương: 50

Giải thích - 110010₂ = 0×2⁰ + 1×2¹ + 0×2² + 0×2³ + 1×2⁴ + 1×2⁵ = 0+2+0+0+16+32 = 50.

Đầu vào - binStr[] = "0011"

Đầu ra - Thập phân tương đương: 3

Giải thích - 0011₂ = 1×2⁰ + 1×2¹ + 0×2² + 0×2³ = 1+2+0+0 = 3.

Phương pháp sử dụng trong chương trình dưới đây

Dùng hàm đệ quy bintoDecimal(strBin, length) nhận chuỗi và độ dài. Với mỗi ký tự chuyển sang thập phân, nhân với 2^(len-i-1) (dùng dịch bit <<), cộng kết quả đệ quy của các bit sau.

  • Nhập chuỗi strBin[] chứa số nhị phân.

  • Tính độ dài bằng strlen(strBin).

  • Hàm bintoDecimal(char binary[], int len, int i=0) trả về số thập phân.

  • Nếu i == len-1 (bit cuối/LSB) trả về binary[i]-'0' (nhân 1 = 2⁰).

  • Ngược lại: temp = binary[i]-'0'; temp <<= len-i-1; temp += bintoDecimal(binary, len, i+1); return temp.

  • In kết quả trong main.

Ví dụ mã

#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 <<"Thập phân tương đương của nhị phân: "<<bintoDecimal(strBin,length) << endl;    return 0; }

Đầu ra

Nếu chạy mã trên sẽ cho kết quả:

Thập phân tương đương của nhị phân: 26