เราได้รับสตริงที่มีเลขฐานสอง เป้าหมายคือการหาจำนวนทศนิยมที่เท่ากันโดยใช้วิธีการแบบเรียกซ้ำ
เลขฐานสองสามารถแปลงเป็นทศนิยมได้โดยใช้วิธีต่อไปนี้-:เปลี่ยนจาก 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