C++ 中二進位制到十進位制的遞迴程式


給定一個包含二進位制數的字串。目標是使用遞迴方法找到等效的十進位制數。

二進位制數可以透過以下方法轉換為十進位制:從最低有效位 (LSB) 到最高有效位 (MSB) 遍歷,並將每個位乘以 2i 的冪,其中 0<=i<=數字個數,並將所有先前結果加到它。

讓我們看看這個的各種輸入輸出場景 -

輸入 - binStr[] = "110010"

輸出 - 給定二進位制的等效十進位制:50

說明- 如果我們將 110010 轉換為十進位制,則數字將為:

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

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

= 50

輸入 - binStr[] = "0011"

輸出 - 給定二進位制的等效十進位制:3

說明 - 如果我們將 110010 轉換為十進位制,則數字將為:

= 1*20+1*21 +0*22 +0*23

= 1+2+0+0

= 3

下面程式中使用的方案如下

在這種方案中,我們使用遞迴函式 bintoDecimal(strBin,length),它接收輸入字串及其長度,併為每個字元將其轉換為十進位制並乘以 2i。將先前結果加到它。

  • 獲取包含二進位制數的輸入字串 strBin[]。

  • 使用 strlen(strBin) 計算其長度。

  • 函式 bintoDecimal(strBin,length) 接收輸入並使用遞迴方案計算返回的數字。

  • 如果我們位於最後一個字元(即最低有效位),則返回其十進位制值,因為它將相同。(乘以 1,即 20

  • 否則設定 temp=binary[i]-'0'。它的十進位制值。

  • 現在使用 temp<<len-i-1 將 temp 乘以 2len-i-1

  • 使用 temp=temp+bintoDecimal(binary,len,i+1) 將其他數字的結果加到 temp。

  • 在遞迴結束時返回 temp。

  • 在主函式中列印計算出的十進位制值。

示例

#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

更新於: 2021-11-03

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告