Skip to content

ข้อสอบท้ายค่าย 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); 
}