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