隨筆:羅馬數字

古羅馬帝國開創了輝煌的人類文明,但他們的數字表示法的確有些繁瑣,尤其在表示大數的時候,現在看起來簡直不能忍受,所以在現代很少使用了。之所以這樣,不是因爲發明表示法的人的智力的問題,而是因爲一個宗教的原因,當時的宗教禁止在數字中出現0的概念!

    羅馬數字的表示主要依賴以下幾個基本符號:

   I  1

   V  5

   X  10

   L  50

   C  100

   D  500

   M  1000

    這裏,我們只介紹一下1000以內的數字的表示法。

    單個符號重複多少次,就表示多少倍。最多重複3次。比如:CCC表示300  XX表示20,但150並不用LLL表示,這個規則僅適用於IX C M。

    如果相鄰級別的大單位在右,小單位在左,表示大單位中扣除小單位。比如:IX表示9  IV表示4  XL表示40 更多的示例參見下表,你找到規律了嗎?

 

 

I,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

LI,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

CD,400

D,500

DC,600

DCC,700

DCCC,800

CM,900

CMXCIX,999

    本題目的要求是:請編寫程序,由用戶輸入若干個羅馬數字串,程序輸出對應的十進制表示。

    輸入格式是:第一行是整數n,表示接下來有n個羅馬數字(n<100)。以後每行一個羅馬數字。羅馬數字大小不超過999。

    要求程序輸出n行,就是羅馬數字對應的十進制數據。

    例如,用戶輸入:

3

LXXX

XCIII

DCCII

則程序應該輸出:

80

93

702


java代碼如下:

import java.util.HashMap;

public class RomeNumber
{
	private static HashMap<Character,Integer> numberMap=new HashMap<Character,Integer>();
	public static void main(String[] args)
	{
		numberMap.put('I', 1);
		numberMap.put('V', 5);
		numberMap.put('X', 10);
		numberMap.put('L', 50);
		numberMap.put('C', 100);
		numberMap.put('D', 500);
		numberMap.put('M', 1000);
		int result=processNumber("XCIII");//只做了單個數據的測試
		System.out.println(result);

	}
	public static int processNumber(String number){
		
		char[] numberArray=number.toCharArray();
		int result=0;
		int i=0;
		while(i<numberArray.length-1){
			
			if(numberMap.get(numberArray[i+1])>numberMap.get(numberArray[i])){
				result+=numberMap.get(numberArray[i+1])-numberMap.get(numberArray[i]);
				i+=2;
			}else{
				result+=numberMap.get(numberArray[i]);
				i++;
			}
		}
		if(i==numberArray.length-1){
			result+=numberMap.get(numberArray[i]);
		}
		return result;
	}
}


發佈了39 篇原創文章 · 獲贊 22 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章