บทความนี้อธิบายวิธีการใช้งานของ Java ในการแปลงตัวเลขโรมันคลาสสิกและตัวเลขอาหรับ แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
จักรวรรดิโรมันโบราณสร้างอารยธรรมมนุษย์ที่ยอดเยี่ยม แต่การเป็นตัวแทนจำนวนของพวกเขานั้นยุ่งยากเล็กน้อยโดยเฉพาะอย่างยิ่งเมื่อเป็นตัวแทนจำนวนมากซึ่งตอนนี้ดูเหมือนจะทนไม่ได้ดังนั้นจึงไม่ค่อยได้ใช้ในยุคปัจจุบัน เหตุผลนี้ไม่ใช่เพราะความฉลาดของบุคคลที่คิดค้นการเป็นตัวแทน แต่เป็นเพราะศาสนาแนวคิดของ 0 ถูกห้ามในตัวเลขในเวลานั้น!
การเป็นตัวแทนของตัวเลขโรมันส่วนใหญ่ขึ้นอยู่กับสัญลักษณ์พื้นฐานต่อไปนี้:
ฉัน 1
v 5
x 10
l 50
C 100
d 500
m 1000
ที่นี่เราจะแนะนำการเป็นตัวแทนของตัวเลขภายใน 1,000 เท่านั้น
จำนวนครั้งที่สัญลักษณ์เดียวถูกทำซ้ำแสดงจำนวนครั้ง ทำซ้ำได้ถึง 3 ครั้ง ตัวอย่างเช่น: CCC หมายถึง 300, XX หมายถึง 20 แต่ 150 ไม่ได้แสดงโดย LLL กฎนี้ใช้กับ IXCM เท่านั้น
หากหน่วยขนาดใหญ่ของระดับที่อยู่ติดกันอยู่ทางด้านขวาและหน่วยเล็ก ๆ อยู่ทางซ้ายก็หมายความว่าหน่วยเล็ก ๆ จะถูกหักออกจากหน่วยขนาดใหญ่ ตัวอย่างเช่น: ix หมายถึง 9, IV หมายถึง 4, XL หมายถึง 40 สำหรับตัวอย่างเพิ่มเติมดูตารางด้านล่าง คุณพบกฎหรือไม่?
ฉัน 1
II, 2
III, 3
IV, 4
v, 5
VI, 6
VII, 7
viii, 8
ix, 9
x, 10
XI, 11
XII, 12
xiii, 13
XIV, 14
xv, 15
XVI, 16
XVII, 17
xviii, 18
xix, 19
xx, 20
xxi, 21
xxii, 22
xxix, 29
xxx, 30
xxxiv, 34
xxxv, 35
xxxix, 39
XL, 40
l, 50
หลี่, 51
LV, 55
LX, 60
LXV, 65
LXXX, 80
XC, 90
XCIII, 93
XCV, 95
xcviii, 98
XCIX, 99
C, 100
CC, 200
CCC, 300
ซีดี 400
d, 500
DC, 600
DCC, 700
DCCC, 800
ซม. 900
CMXCIX, 999
ข้อกำหนดของคำถามนี้คือ: โปรดเขียนโปรแกรมผู้ใช้จะเข้าสู่จำนวนของตัวเลขโรมันหลายสายและโปรแกรมส่งออกการเป็นตัวแทนทศนิยมที่เกี่ยวข้อง
รูปแบบอินพุตคือ: บรรทัดแรกคือจำนวนเต็ม N แสดงว่ามีตัวเลขโรมัน N (n <100) จะมีตัวเลขโรมันสำหรับแต่ละบรรทัดในภายหลัง ขนาดของตัวเลขโรมันจะต้องไม่เกิน 999
โปรแกรมจำเป็นต้องใช้ในการส่งออกบรรทัด N ซึ่งเป็นข้อมูลทศนิยมที่สอดคล้องกับตัวเลขโรมัน
ตัวอย่างเช่นอินพุตของผู้ใช้:
3
lxxx
XCIII
DCCII
จากนั้นโปรแกรมควรส่งออก:
80
93
702
นำเข้า java.util.scanner;/*** โปรดเขียนโปรแกรมผู้ใช้จะป้อนจำนวนเงินหลายสายของโรมันและโปรแกรมส่งออกการแสดงทศนิยมที่สอดคล้องกัน * * รูปแบบอินพุตคือ: บรรทัดแรกคือจำนวนเต็ม N แสดงว่ามีตัวเลขโรมัน N (n <100) จะมีตัวเลขโรมันสำหรับแต่ละบรรทัดในภายหลัง ขนาดของตัวเลขโรมันจะต้องไม่เกิน 999 * * โปรแกรมจำเป็นต้องใช้ในการส่งออกบรรทัด n ซึ่งเป็นข้อมูลทศนิยมที่สอดคล้องกับตัวเลขโรมัน * * ตัวอย่างเช่นอินพุตของผู้ใช้: 3 lxxx xciii dccii * * จากนั้นโปรแกรมควรส่งออก: 80 93 702 * * @author ผู้ดูแลระบบ * */คลาสสาธารณะ rometoarabic {โมฆะสาธารณะคงที่หลัก (สตริง [] args) สแกนเนอร์ mscanner = สแกนเนอร์ใหม่ (System.in); System.out.println (r2a (mscanner.nextline ())); System.out.println (a2r (mscanner.nextint ())); } / ** * แปลงตัวเลขโรมันเป็นตัวเลขอาหรับ * * @param m * @return * / สาธารณะคงที่ int r2a (สตริง m) {int graph [] = new int [400]; กราฟ ['i'] = 1; กราฟ ['V'] = 5; กราฟ ['x'] = 10; กราฟ ['l'] = 50; กราฟ ['C'] = 100; กราฟ ['d'] = 500; กราฟ ['m'] = 1000; ถ่าน [] num = m.tochararray (); int sum = graph [num [0]]; สำหรับ (int i = 0; i <num.length - 1; i ++) {ถ้า (กราฟ [num [i]]> = กราฟ [num [i +1]]) {sum += graph [num [i +1]]; } else {sum = sum + graph [num [i + 1]] - 2 * กราฟ [num [i]]; }} ส่งคืนผลรวม; } / ** * แปลงตัวเลขอาหรับเป็นตัวเลขโรมัน * * @param number * @return * / สตริงคงที่สาธารณะ A2r (หมายเลข int) {String rnumber = ""; int [] aarray = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; สตริง [] rarray = {"m", "cm", "d", "cd", "c", "xc", "l", "xl", "x", "x", "ix", "v", "iv", "i"}; if (number <1 || number> 3999) {rnumber = "-1"; } else {สำหรับ (int i = 0; i <aarray.length; i ++) {ในขณะที่ (number> = aarray [i]) {rnumber+= rarray [i]; หมายเลข -= aarray [i]; }} ส่งคืน rnumber; -ผลการทำงาน:
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอัลกอริทึม Java ผู้อ่านที่มีความสนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "โครงสร้างข้อมูล Java และการสอนอัลกอริทึม", "บทสรุปของเคล็ดลับการดำเนินงาน Java Dom", "บทสรุปของไฟล์ Java และเคล็ดลับการดำเนินการไดเรกทอรี" และ "สรุป
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน