ข้อสอบท้ายค่าย 1 ศูนย์ สอวน.กรุงเทพมหานคร ปี 2566 ข้อที่ 2
Problem
สรุปโจทย์
รับค่าจำนวนหนึ่งในเลขฐานสิบหก แล้วพิมพ์ค่าออกมาเป็นเลขฐานสอง และเลขฐานแปด
สิ่งที่ต้องทำ
เขียนโค้ดเพื่อแสดงผลเลขฐานสองและเลขฐานแปดตามที่โจทย์กำหนด
ตัวอย่าง
Input | Output |
---|---|
1F | 11111 37 |
A18 | 101000011000 5030 |
Prerequisites
- Arrays
- Loops
Solution
วิธีทำ
เนื่องจาก ภาษา C มีตัวแปรที่จะเก็บเป็นเลขฐานแปด และเลขฐานสิบหกให้เรียบร้อยแล้ว เราแค่ต้องแปลงจากเลขฐานสิบ เป็นเลขฐานสอง โดยสามารถใช้การหาร 2 แล้วหาเศษที่เหลือจากการหารเรื่อยๆ จนตัวเลขนั้นๆหมดไปนั่นเอง
Code
posn1_66_bkk_p2.cpp
#include <stdio.h>
int main(){
int hex;
// %x: รับค่าเป็นเลขฐานสิบหกโดยตรง
scanf("%x",&hex);
// แปลงเป็นเลขฐานสิบ
int num = (int)hex;
// แปลงเลขฐานสิบ -> เลขฐานสอง
int i = 0;
int binary[100] = {0};
int bi = hex;
while (bi > 0) {
binary[i] = bi % 2;
bi /= 2;
i++;
}
// พิมพ์ค่าเป็นเลขฐานสอง
for (int j = i - 1; j >= 0; j--){
printf("%d", binary[j]);
}
printf("\n");
// %o: พิมพ์ค่าเป็นเลขฐานแปดโดยตรง
printf("%o", num);
}