ด้วยตัวเลขฐานสิบหกเป็นอินพุต ภารกิจคือการแปลงเลขฐานสิบหกที่กำหนดให้เป็นเลขฐานสิบ
เลขฐานสิบหกในคอมพิวเตอร์จะแสดงด้วยฐาน 16 และเลขฐานสิบจะแสดงด้วยฐาน 10 และแสดงด้วยค่า 0 - 9 ในขณะที่เลขฐานสิบหกมีตัวเลขเริ่มต้นจาก 0 – 15 โดยที่ 10 จะแสดงเป็น A, 11 เป็น B, 12 เป็น C, 13 เป็น D, 14 เป็น E และ 15 เป็น F.
ในการแปลงเลขฐานสิบหกเป็นเลขฐานสิบ ให้ทำตามขั้นตอนเหล่านี้ -
- เราจะแยกตัวเลขเริ่มต้นจากขวาไปซ้ายจนถึงเศษที่เหลือ จากนั้นคูณด้วยกำลังเริ่มต้นจาก 0 และจะเพิ่มขึ้น 1 จนถึง (จำนวนหลัก) – 1
- เนื่องจากเราต้องแปลงจากฐานสิบหกเป็นเลขฐานสอง ฐานกำลังจึงเป็น 16 เนื่องจากฐานแปดมีฐาน 16
- คูณตัวเลขของอินพุตที่กำหนดด้วยฐานและกำลังและเก็บผลลัพธ์
- เพิ่มค่าที่คูณทั้งหมดเพื่อให้ได้ผลลัพธ์สุดท้ายซึ่งจะเป็นเลขฐานสิบ
ด้านล่างนี้คือการแสดงรูปภาพของการแปลงเลขฐานสิบหกเป็นเลขฐานสิบ
ตัวอย่าง
Input-: ACD A(10) will be converted to a decimal number by -: 10 X 16^2 = 2560 C(12) will be converted to a decimal number by -: 12 X 16^1 = 192 D(13) will be converted to a decimal number by -: 13 X 16^0 = 13 Output-: total = 13 + 192 + 2560 = 2765
อัลกอริทึม
Start Step 1-> declare function to convert hexadecimal to decimal int convert(char num[]) Set int len = strlen(num) Set int base = 1 Set int temp = 0 Loop For int i=len-1 and i>=0 and i— IF (num[i]>='0' && num[i]<='9') Set temp += (num[i] - 48)*base Set base = base * 16 End Else If (num[i]>='A' && num[i]<='F') Set temp += (num[i] - 55)*base Set base = base*16 End return temp step 2-> In main() declare char num[] = "3F456A" Call convert(num) Stop
ตัวอย่าง
#include<iostream> #include<string.h> using namespace std; //convert hexadecimal to decimal int convert(char num[]) { int len = strlen(num); int base = 1; int temp = 0; for (int i=len-1; i>=0; i--) { if (num[i]>='0' && num[i]<='9') { temp += (num[i] - 48)*base; base = base * 16; } else if (num[i]>='A' && num[i]<='F') { temp += (num[i] - 55)*base; base = base*16; } } return temp; } int main() { char num[] = "3F456A"; cout<<num<<" after converting to deciaml becomes : "<<convert(num)<<endl; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น จะเกิดผลลัพธ์ดังต่อไปนี้
3F456A after converting to deciaml becomes : 4146538