Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 2진에서 10진으로의 재귀 프로그램

<시간/>

이진수가 포함된 문자열이 제공됩니다. 목표는 재귀 방법을 사용하여 동등한 십진수를 찾는 것입니다.

이진수는 다음 방법을 사용하여 십진수로 변환할 수 있습니다. LSB에서 MSB로 순회하고 각각에 2 i 의 거듭제곱을 곱합니다. 여기서 0<=i<=아니요. 자릿수 및 모든 이전 결과.

여기에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다 -

입력 - binStr[] ="110010"

출력 − 주어진 바이너리의 등가 소수점:50

설명 −110010을 10진수로 변환하면 숫자는 다음과 같습니다.-

=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을 10진수로 변환하면 숫자는 다음과 같습니다.-

=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 곱하기 즉 2 0 )

  • 그렇지 않으면 temp=binary[i]-'0'으로 설정하십시오. 10진수 값입니다.

  • 이제 temp에 2 len-i-1 을 곱합니다. temp< 사용

  • 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 <<"Equivalent Decimal of given binary: "<<bintoDecimal(strBin,length) << endl;
   return 0;
}

출력

위의 코드를 실행하면 다음과 같은 출력이 생성됩니다.

Equivalent Decimal of given binary: 26