leetcode 羅馬數字與整數的轉換演算法

2021-07-14 02:36:28 字數 1281 閱讀 4632

題目出處

實現羅馬數字與整數的互轉。 數字大小為[1, 3999]之間。

羅馬數字

羅馬數字字母

羅馬數字只有7個字母組成,每個字母**的字如下字母m

dclx

vi代表數字

1000

500100

501051

四個規則

相同的數字連寫, 所表示的數等於這些數字相加得到的數。如 ***表示 30

小的數字在大的數字的右邊, 所表示的數等於這些數字相加得到的數 如viii 表示8

小的數字(限於i, x, c)在大的數字的左邊, 所表示的數等於大數減去小的數: 如iv 表示4

在乙個數的上面畫一條橫線, 表示這個數增值1000倍(由於題目只考慮4000以內的數,所以這條規則不用考慮)。

五個組數規則

i, x, c: 最多只能連用3個, 如果放在大數的左邊,只能用1個。

v, l, d: 不能放在大數的左邊,只能使用乙個。

i 只能用在v和x的左邊。 iv表示4, ix表示9

x只能放在l,c左邊。 xl 表示40, xc表示90

c只能用在d, m左邊。 cd 表示400, cm表示900

分析

這裡面有個麻煩的點, 就是數字可以放在左邊也可以放在右邊。那就讓處理邏輯沒那麼順。

如果都只能放在右邊,那樣就可以直接使用加法。如9表示為 ix, 而如果表示為 viiii,這樣處理相加就ok.  

對於整數轉羅馬數字:可以使用組合數字來進行拆分,使程式能夠實現連加的方法。

對於羅馬數字轉整數: 需要得用放在大數左邊的數字只能使用乙個的特點來判斷對當前字母是加還是減。

**

整數轉羅馬數字

string inttoroman(int num) ;

static string flags[13] = ;

for(int i = 0; i < 13 && num > 0; i++)

}return ret;

}

羅馬數字轉整數

int romantoint(string s) 

return val;

}

LeetCode 羅馬數字轉整數

一.羅馬數字轉整數 羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常...

Leetcode 整數轉羅馬數字

題目描述 羅馬數字包含以下七種字元 i,v,x,l,c,d和m。字元數值i 1 v 5 x 10 l 50 c 100 d 500 m 1000例如,羅馬數字 2 寫做ii,即為兩個並列的 1。12 寫做xii,即為x ii。27 寫做xxvii,即為xx v ii。通常情況下,羅馬數字中小的數字在...

LeetCode 整數轉羅馬數字

題目如下 點此讀題 羅馬數字包含以下七種字元 i,v,x,l,c,d 和 m。字元 數值 i 1v 5 x 10 l 50 c 100 d 500 m 1000 例如,羅馬數字 2 寫做 ii 即為兩個並列的 1。12 寫做 xii 即為 x ii 27 寫做 xxvii,即為 xx v ii 通常...