แปลงเลขฐาน 10 เป็นเลขฐาน 16
โจทย์
รับค่าเลขฐาน 10 แล้วแปลงออกมาเป็นเลขฐาน 16 โดยไม่ใช้เมธอด Integer.toHexString()
| Input | Output |
|---|---|
| 147 | 93 |
| 2 | 2 |
| 2748 | ABC |
| 2147483647 | 7FFFFFFF |
โค้ด
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
int base10Number = scanner.nextInt();
String base16Number = "";
while (base10Number > 0) {
int divisionAnswer = base10Number / 16;
int remainder = base10Number % 16;
base10Number = divisionAnswer;
base16Number = switch (remainder) {
default -> String.valueOf(remainder);
case 10 -> 'A';
case 11 -> 'B';
case 12 -> 'C';
case 13 -> 'D';
case 14 -> 'E';
case 15 -> 'F';
} + base16Number;
}
System.out.println(base16Number.isEmpty() ? "0" : base16Number);
}
}คำอธิบาย
ขั้นตอนที่ 1: การนำเข้าไลบรารี
import java.util.Scanner;- บรรทัดนี้เป็นการนำเข้าไลบรารีที่ชื่อว่า
Scanner Scannerเป็นเครื่องมือที่ช่วยให้เราสามารถรับข้อมูลจากผู้ใช้ได้- เปรียบเสมือนการหยิบเครื่องรับสัญญาณที่สามารถรับตัวเลขจากเราได้มาเตรียมไว้
ขั้นตอนที่ 2: การสร้างคลาส
public class Main {
// โค้ดอื่นๆ จะอยู่ในนี้
}class Mainคือการสร้างกล่องใหญ่ที่จะเก็บโค้ดทั้งหมดของเรา- คิดเหมือนกับการสร้างห้องทำงานที่ชื่อว่า “Main” ที่เราจะใช้แปลงตัวเลข
ขั้นตอนที่ 3: การสร้างเมธอดหลัก
public static void main (String[] args) {
// โค้ดหลักจะอยู่ในนี้
}- นี่คือจุดเริ่มต้นของโปรแกรมของเรา
- เปรียบเสมือนประตูทางเข้าของห้องทำงาน เมื่อเราเปิดโปรแกรม มันจะเริ่มทำงานจากตรงนี้
ขั้นตอนที่ 4: การสร้างตัวรับข้อมูล
Scanner scanner = new Scanner(System.in);- เราสร้างเครื่องมือที่ชื่อว่า
scannerเพื่อรับข้อมูลจากผู้ใช้ - คิดเหมือนกับการเตรียมปากกาและกระดาษไว้พร้อมจดบันทึกตัวเลขที่ผู้ใช้จะบอกเรา
ขั้นตอนที่ 5: การรับข้อมูลจากผู้ใช้
int base10Number = scanner.nextInt();- เราใช้
scannerเพื่ออ่านตัวเลขฐานสิบที่ผู้ใช้พิมพ์เข้ามา และเก็บไว้ในตัวแปรbase10Number - เปรียบเสมือนการถามผู้ใช้ว่า “กรุณาใส่ตัวเลขฐานสิบ” แล้วจดตัวเลขนั้นลงในสมุด
ขั้นตอนที่ 6: การเตรียมตัวแปรสำหรับเก็บผลลัพธ์
String base16Number = "";- เราสร้างกล่องว่างๆ ที่ชื่อว่า
base16Numberเพื่อเก็บผลลัพธ์เลขฐานสิบหก - คิดเหมือนกับการเตรียมกระดาษเปล่าไว้เขียนคำตอบ
ขั้นตอนที่ 7: การแปลงเลขฐานสิบเป็นฐานสิบหก
while (base10Number > 0) {
int divisionAnswer = base10Number / 16;
int remainder = base10Number % 16;
base10Number = divisionAnswer;
base16Number = switch (remainder) {
default -> String.valueOf(remainder);
case 10 -> "A";
case 11 -> "B";
case 12 -> "C";
case 13 -> "D";
case 14 -> "E";
case 15 -> "F";
} + base16Number;
}- นี่คือขั้นตอนการแปลงเลขฐานสิบเป็นฐานสิบหก โดยใช้วิธีการหารด้วย 16 ไปเรื่อยๆ
while (base10Number > 0)หมายถึง ทำซ้ำไปเรื่อยๆ ตราบใดที่base10Numberยังมากกว่า 0divisionAnswer = base10Number / 16คือการหารbase10Numberด้วย 16 แล้วเก็บผลลัพธ์ไว้remainder = base10Number % 16คือการหาเศษจากการหารด้วย 16base10Number = divisionAnswerคือการอัพเดทค่าbase10Numberเป็นผลลัพธ์จากการหาร- ส่วน
switchใช้เพื่อแปลงเศษที่ได้เป็นตัวเลขหรือตัวอักษรในระบบเลขฐานสิบหก (0-9 และ A-F) - ผลลัพธ์จะถูกต่อไว้ข้างหน้า
base16Numberเดิม
เปรียบเสมือนการแบ่งขนมให้เพื่อน 16 คนไปเรื่อยๆ แล้วจดว่าแต่ละครั้งมีขนมเหลือกี่ชิ้น โดยถ้าเหลือ 10-15 ชิ้น เราจะใช้ตัวอักษร A-F แทน
ขั้นตอนที่ 8: การแสดงผลลัพธ์
System.out.println(base16Number.isEmpty() ? "0" : base16Number);- นี่คือการแสดงผลลัพธ์เลขฐานสิบหกที่เราได้
- ถ้า
base16Numberว่างเปล่า (กรณีที่ตัวเลขเริ่มต้นเป็น 0) เราจะแสดง “0” - ถ้าไม่ว่างเปล่า เราจะแสดงค่าที่แปลงได้
- เปรียบเสมือนการอ่านคำตอบที่เราจดไว้บนกระดาษให้ทุกคนฟัง
ปรับปรุงล่าสุด