একটি বাইনারি সংখ্যা ধারণকারী স্ট্রিং দেওয়া থাকলে, রিকারসিভ পদ্ধতিতে এর ডেসিমাল সমতুল্য বের করতে হবে।
বাইনারি থেকে ডেসিমাল: LSB থেকে MSB পর্যন্ত প্রতিটি বিটকে 2ⁱ দিয়ে গুণ করে যোগ করুন।
উদাহরণ
ইনপুট − binStr[] = "110010"
আউটপুট − সমতুল্য ডেসিমাল: 50
ব্যাখ্যা − 0×2⁰ + 1×2¹ + 0×2² + 0×2³ + 1×2⁴ + 1×2⁵ = 50।
ইনপুট − binStr[] = "0011"
আউটপুট − সমতুল্য ডেসিমাল: 3
ব্যাখ্যা − 1×2⁰ + 1×2¹ + 0×2² + 0×2³ = 3।
প্রোগ্রামে ব্যবহৃত পদ্ধতি
রিকারসিভ ফাংশন bintoDecimal(strBin, length, i=0) প্রতিটি ক্যারাক্টারকে ডেসিমালে রূপান্তর করে 2^(len-i-1) দিয়ে গুণ করে যোগ করে।
ইনপুট স্ট্রিং
strBin[]ও দৈর্ঘ্যlengthনিন।bintoDecimal(char binary[], int len, int i=0)ফাংশন রিকারসিভভাবে ডেসিমাল ফেরত দেয়।যদি
i == len-1(LSB),binary[i] - '0'ফেরত দিন।অন্যথায়
temp = binary[i]-'0'; temp <<= len-i-1; temp += bintoDecimal(binary, len, i+1); return 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