हमें एक स्ट्रिंग दी गई है जिसमें एक बाइनरी संख्या है। लक्ष्य है पुनरावर्ती विधि का उपयोग करके समतुल्य दशमलव संख्या ढूंढना।
एक बाइनरी संख्या को निम्न विधि का उपयोग करके दशमलव में बदला जा सकता है-: 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) इनपुट लेता है और पुनरावर्ती दृष्टिकोण का उपयोग करके गणना की गई संख्या लौटाता है।
यदि हम अंतिम वर्ण पर हैं जो LSB है, तो इसका दशमलव लौटाएं क्योंकि यह समान होगा (1 यानी 20 से गुणा)।
अन्यथा temp=binary[i]-'0' सेट करें। इसका दशमलव मान।
अब temp को 2len-i-1 से temp<
अन्य अंकों के परिणाम को 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