Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมแบบเรียกซ้ำสำหรับไบนารีถึงทศนิยมใน C++


เราได้รับสตริงที่มีเลขฐานสอง เป้าหมายคือการหาจำนวนทศนิยมที่เท่ากันโดยใช้วิธีการแบบเรียกซ้ำ

เลขฐานสองสามารถแปลงเป็นทศนิยมได้โดยใช้วิธีต่อไปนี้-:เปลี่ยนจาก LSB เป็น MSB แล้วคูณแต่ละตัวด้วยกำลัง 2 i โดยที่ 0<=i<=ไม่ ของตัวเลขและผลลัพธ์ก่อนหน้าทั้งหมด

ให้เราดูสถานการณ์อินพุตเอาต์พุตที่หลากหลายสำหรับสิ่งนี้ -

ป้อนข้อมูล − binStr[] ="110010"

ผลผลิต − ทศนิยมเทียบเท่าของไบนารีที่กำหนด:50

คำอธิบาย −หากเราแปลง 110010 เป็นทศนิยม ตัวเลขจะเป็น:-

=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 เป็นทศนิยม ตัวเลขจะเป็น:-

=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' เป็นค่าทศนิยม

  • ตอนนี้คูณอุณหภูมิด้วย 2 len-i-1 ใช้ temp<

  • เพิ่มผลลัพธ์ของตัวเลขอื่นๆ ลงใน temp โดยใช้ temp=temp+bintoDecimal(binary,len,i+1)

  • เมื่อสิ้นสุดการเรียกซ้ำ อุณหภูมิจะกลับคืนมา

  • พิมพ์ทศนิยมที่คำนวณได้เป็นหลัก

ตัวอย่าง

#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