เราได้รับเลขฐานสิบหกเป็นสตริง งานคือการแปลงเป็น Octal ในการแปลงเลขฐานสิบหกเป็นฐานแปด เราต้อง −
- หาเลขฐานสองที่เทียบเท่ากับเลขฐานสิบหก
- แปลงเลขฐานสองเป็นเลขฐานแปด
เลขฐานสิบหกคืออะไร
เลขฐานสิบหกคือตัวเลขที่เป็นฐานของ 16 ตัวเลขตั้งแต่ 0-9 และตั้งแต่ 10 เป็นต้นไป ตัวเลขจะถูกแทนด้วย A ซึ่งแทน 10, B สำหรับ 11, C สำหรับ 12, D สำหรับ 13, E สำหรับ 14 และ F สำหรับ 15.
ในการแปลงเลขฐานสิบหกเป็นเลขฐานสอง ทุกตัวเลขจะถูกแปลงเป็นเลขฐานสองที่เทียบเท่ากับ 4 บิต และหลังจากนั้นตัวเลขเหล่านี้จะรวมกันเป็นเลขฐานสองที่สอดคล้องกัน
เลขฐานแปดคืออะไร
เลขฐานแปดในคอมพิวเตอร์จะแสดงด้วยฐาน 8 ซึ่งอยู่ในรูปแบบเลขฐานแปด 0-7 สร้างขึ้นโดยการจัดกลุ่มเลขฐานสองสามตัวหรือเลขฐานสองสามหลัก
สิ่งที่เราต้องทำ
เช่นเดียวกับที่เรามีเลขฐานสิบหก 1A6 ดังนั้นจึงหมายถึง 1, 10 และ 6 สำหรับเลขฐานสิบหกถึงฐานแปดก่อนอื่น เราต้องหาค่าเทียบเท่าเลขฐานสองของเลขฐานสิบหกนั่นคือ
ดังนั้น เลขฐานสองของ 1A6 =0001 1010 0110
หลังจากที่หาเลขฐานสองของเลขฐานสิบหกได้แล้ว ภารกิจต่อไปคือการหาเลขฐานแปดของเลขฐานสอง
ก่อนหน้านั้นเราจะจัดกลุ่มเลขฐานสองเป็นสาม หลังจากจัดกลุ่มเป็น 3 เราจะได้ 000 110 100 110
ตัวแทนฐานแปดจะเป็นใคร -
ดังนั้นการแทนค่าฐานแปดของเลขฐานสิบหก 1A6 คือ − 646
ตัวอย่าง
Input: 1A6 Output: Octal Value = 646 Explanation: Input: 1AA Output: 652
วิธีการที่เราจะใช้ในการแก้ปัญหาที่กำหนด -
- รับอินพุตและจัดเก็บเป็นสตริง
- แปลงเลขฐานสิบหกหรือนิพจน์เป็นเลขฐานสองโดยทำตามวิธีการด้านล่าง −
- ตรวจสอบเลขฐานสิบหกทั้งหมด 16 ตัวโดยเพิ่มการแทนค่าเลขฐานสองตามลำดับ
- ส่งคืนผลลัพธ์
- แปลงเลขฐานสองเป็นเลขฐานแปดโดยทำตามขั้นตอนต่อไปนี้ −
- นำ 3 ตำแหน่งโดยเปรียบเทียบกรณีที่เป็นไปได้ทั้งหมดของเลขฐานสองกับฐานแปด
- ตั้งค่าของฐานแปด =(val * place) + ฐานแปด;
- หารเลขฐานสองด้วย 1000
- สถานที่ *=10
- ส่งคืนผลลัพธ์
อัลกอริทึม
Start Step 1-> In function long long int hexa_binary(char hex[]) Declare variables binary, place Declare and initialize i = 0, rem, val Initialize t n = strlen(hex) Initialize binary = 0ll and place = 0ll Loop For i = 0 and hex[i] != '\0' and i++ { binary = binary * place; switch (hex[i]) { case '0': binary += 0 case '1': binary += 1 case '2': binary += 10 case '3': binary += 11 case '4': binary += 100 case '5': binary += 101 case '6': binary += 110 case '7': binary += 111 case '8': binary += 1000 case '9': binary += 1001 case 'a': case 'A': binary += 1010 case 'b': case 'B': binary += 1011 case 'c': case 'C': binary += 1100 case 'd': case 'D': binary += 1101; break; case 'e': case 'E': binary += 1110; break; case 'f': case 'F': binary += 1111; break; default: printf("Invalid hexadecimal input."); } place = 10000; } return binary; } long long int binary_oct(long long binary) { long long int octal, place; int i = 0, rem, val; octal = 0ll; place = 0ll; place = 1; while (binary > 0) { rem = binary % 1000; switch (rem) { case 0: val = 0; break; case 1: val = 1; break; case 10: val = 2; break; case 11: val = 3; break; case 100: val = 4; break; case 101: val = 5; break; case 110: val = 6; break; case 111: val = 7; break; } octal = (val * place) + octal; binary /= 1000; place *= 10; } return octal; } long long int hexa_oct(char hex[]) { long long int octal, binary; // convert HexaDecimal to Binary binary = hexa_binary(hex); // convert Binary to Octal octal = binary_oct(binary); return octal; } int main() { char hex[20] = "1a99"; printf("Octal Value = %lld", hexa_oct(hex)); return 0; }
ตัวอย่าง
#include <stdio.h> #include <string.h> #include <math.h> //To convert hex to binary first long long int hexa_binary(char hex[]) { long long int binary, place; int i = 0, rem, val; int n = strlen(hex); binary = 0ll; place = 0ll; for (i = 0; hex[i] != '\0'; i++) { binary = binary * place; switch (hex[i]) { case '0': binary += 0; break; case '1': binary += 1; break; case '2': binary += 10; break; case '3': binary += 11; break; case '4': binary += 100; break; case '5': binary += 101; break; case '6': binary += 110; break; case '7': binary += 111; break; case '8': binary += 1000; break; case '9': binary += 1001; break; case 'a': case 'A': binary += 1010; break; case 'b': case 'B': binary += 1011; break; case 'c': case 'C': binary += 1100; break; case 'd': case 'D': binary += 1101; break; case 'e': case 'E': binary += 1110; break; case 'f': case 'F': binary += 1111; break; default: printf("Invalid hexadecimal input."); } place = 10000; } return binary; } //To convert binary to octal long long int binary_oct(long long binary) { long long int octal, place; int i = 0, rem, val; octal = 0ll; place = 0ll; place = 1; // giving all binary numbers for octal conversion while (binary > 0) { rem = binary % 1000; switch (rem) { case 0: val = 0; break; case 1: val = 1; break; case 10: val = 2; break; case 11: val = 3; break; case 100: val = 4; break; case 101: val = 5; break; case 110: val = 6; break; case 111: val = 7; break; } octal = (val * place) + octal; binary /= 1000; place *= 10; } return octal; } // to convert the hexadecimal number to octal long long int hexa_oct(char hex[]) { long long int octal, binary; // convert HexaDecimal to Binary binary = hexa_binary(hex); // convert Binary to Octal octal = binary_oct(binary); return octal; } //main function int main() { char hex[20] = "5CD"; printf("Octal Value = %lld", hexa_oct(hex)); return 0; }
ผลลัพธ์
Octal Value = 2715