C++二进制转十进制递归程序

我们得到一个包含二进制数的字符串。目标是使用递归方法找到等效的十进制数。

可以使用以下方法将二进制数转换为十进制数-:从 LSB 到 MSB 并乘以 2 i 的幂,其中 0<=i<=no。数字和所有以前的结果。

让我们看看这个的各种输入输出场景 -

输入 - binStr[] = "110010"

输出 - 给定二进制的等效十进制:50

解释 -如果我们将 110010 转换为十进制,那么数字将是:-

= 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

输入 - binStr[] = "0011"

输出 - 给定二进制的等效十进制:3

说明- 如果我们将 110010 转换为十进制,则数字将是:-

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

= 1+2+0+0

= 3

下面程序中使用的方法如下

在这种方法中,我们使用递归函数bintoDecimal(strBin,length),它接受输入字符串及其长度,并将每个字符转换为十进制并乘以 2 i。将以前的结果添加到它。

  • 获取包含二进制数的输入字符串 strBin[]。

  • 使用 计算其长度strlen(strBin)。

  • 函数bintoDecimal(strBin,length)接受输入并返回使用递归方法计算的数字。

  • 如果我们最后一个字符是 LSB,则返回它的十进制,因为它是相同的。(乘以 1 i.e2 0

  • 否则设置 temp=binary[i]-'0'。它的十进制值。

  • 现在使用 temp<<len-i-1将 temp 与 2 len-i-1相乘。

  • 使用 temp=temp+bintoDecimal(binary,len,i+1) 将其他数字的结果添加到 temp。

  • 在递归结束时返回温度。

  • 在 main 中打印计算出的小数点。

示例

#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 <<"给定二进制的等效十进制: "<<bintoDecimal(strBin,length) << endl;
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出

给定二进制的等效十进制: 26