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

โปรแกรม C++ สำหรับเลขฐานสิบหกถึงทศนิยม


ด้วยตัวเลขฐานสิบหกเป็นอินพุต ภารกิจคือการแปลงเลขฐานสิบหกที่กำหนดให้เป็นเลขฐานสิบ

เลขฐานสิบหกในคอมพิวเตอร์จะแสดงด้วยฐาน 16 และเลขฐานสิบจะแสดงด้วยฐาน 10 และแสดงด้วยค่า 0 - 9 ในขณะที่เลขฐานสิบหกมีตัวเลขเริ่มต้นจาก 0 – 15 โดยที่ 10 จะแสดงเป็น A, 11 เป็น B, 12 เป็น C, 13 เป็น D, 14 เป็น E และ 15 เป็น F.

ในการแปลงเลขฐานสิบหกเป็นเลขฐานสิบ ให้ทำตามขั้นตอนเหล่านี้ -

  • เราจะแยกตัวเลขเริ่มต้นจากขวาไปซ้ายจนถึงเศษที่เหลือ จากนั้นคูณด้วยกำลังเริ่มต้นจาก 0 และจะเพิ่มขึ้น 1 จนถึง (จำนวนหลัก) – 1
  • เนื่องจากเราต้องแปลงจากฐานสิบหกเป็นเลขฐานสอง ฐานกำลังจึงเป็น 16 เนื่องจากฐานแปดมีฐาน 16
  • คูณตัวเลขของอินพุตที่กำหนดด้วยฐานและกำลังและเก็บผลลัพธ์
  • เพิ่มค่าที่คูณทั้งหมดเพื่อให้ได้ผลลัพธ์สุดท้ายซึ่งจะเป็นเลขฐานสิบ

ด้านล่างนี้คือการแสดงรูปภาพของการแปลงเลขฐานสิบหกเป็นเลขฐานสิบ

โปรแกรม C++ สำหรับเลขฐานสิบหกถึงทศนิยม

ตัวอย่าง

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