이진수가 포함된 문자열이 제공됩니다. 목표는 재귀 방법을 사용하여 동등한 십진수를 찾는 것입니다.
이진수는 다음 방법을 사용하여 십진수로 변환할 수 있습니다. 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