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+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告