কম্পিউটার টিউটোরিয়াল

C++-এ রিকারসিভ প্রোগ্রাম দিয়ে বাইনারি থেকে ডেসিমাল


একটি বাইনারি সংখ্যা ধারণকারী স্ট্রিং দেওয়া থাকলে, রিকারসিভ পদ্ধতিতে এর ডেসিমাল সমতুল্য বের করতে হবে।

বাইনারি থেকে ডেসিমাল: 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
  1. C++-এ ডেসিমেল থেকে হেক্সাডেসিমেল কনভার্সন প্রোগ্রাম

  2. C++-এ ডেসিমেল থেকে বাইনারি কনভার্সন প্রোগ্রাম

  3. C++-এ বাইনারি থেকে ডেসিমেল কনভার্সন প্রোগ্রাম

  4. C++-এ পিরামিডের ভলিউম বের করার প্রোগ্রাম