Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình đệ quy cho Binary to Decimal trong C ++

Chúng tôi được cung cấp một chuỗi chứa một số nhị phân. Mục đích là để tìm số thập phân tương đương bằng phương pháp đệ quy.

Một số nhị phân có thể được chuyển đổi thành số thập phân bằng cách sử dụng phương pháp sau-:Chuyển từ LSB sang MSB và nhân mỗi số với lũy thừa của 2 i Trong đó 0 <=i <=không. trong số các chữ số và tất cả các kết quả trước đó cho nó.

Hãy để chúng tôi xem các kịch bản đầu ra đầu vào khác nhau cho việc này -

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

Đầu ra - Số thập phân tương đương của hệ nhị phân đã cho:50

Giải thích −Nếu chúng ta chuyển 110010 thành số thập phân thì số sẽ là:-

=0 * 2 0 + 1 * 2 1 + 0 * 2 2 + 0 * 2 3 + 1 * 2 4 + 1 * 2 5

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

=50

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

Đầu ra - Số thập phân tương đương của hệ nhị phân đã cho:3

Giải thích - Nếu chúng ta chuyển 110010 thành số thập phân thì số sẽ là:-

=1 * 2 0 + 1 * 2 1 + 0 * 2 2 + 0 * 2 3

=1 + 2 + 0 + 0

=3

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

Trong cách tiếp cận này, chúng tôi đang sử dụng hàm đệ quy bintoDecimal (strBin, length) lấy chuỗi đầu vào và độ dài của nó và đối với mỗi ký tự, chuyển đổi nó thành số thập phân và nhân nó với 2 i . Thêm các kết quả trước đó vào nó.

  • Lấy chuỗi đầu vào strBin [] chứa một số nhị phân.

  • Tính độ dài của nó bằng cách sử dụng strlen (strBin).

  • Hàm bintoDecimal (strBin, length) nhận đầu vào và trả về số được tính bằng cách tiếp cận đệ quy.

  • Nếu chúng ta ở ký tự cuối cùng là LSB, thì hãy trả về số thập phân của nó vì nó sẽ giống nhau. (nhân với 1 tức là 2 0 )

  • Nếu không, hãy đặt temp =binary [i] - '0'. Giá trị thập phân của nó.

  • Bây giờ nhân nhiệt độ với 2 len-i-1 sử dụng temp <

  • Thêm kết quả của các chữ số khác vào tạm thời bằng cách sử dụng temp =temp + bintoDecimal (binary, len, i + 1).

  • Khi kết thúc đệ quy, trả về nhiệt độ.

  • In số thập phân được tính toán trong chính.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

Equivalent Decimal of given binary: 26