古羅馬帝國開創了輝煌的人類文明,但他們的數字表示法的確有些繁瑣,尤其在表示大數的時候,現在看起來簡直不能忍受,所以在現代很少使用了。
之所以這樣,不是因為發明表示法的人的智力的問題,而是因為乙個宗教的原因,當時的宗教禁止在數字中出現0的概念!
羅馬數字的表示主要依賴以下幾個基本符號:
i --> 1
v --> 5
x --> 10
l --> 50
c --> 100
d --> 500
m --> 1000
這裡,我們只介紹一下1000以內的數字的表示法。
單個符號重複多少次,就表示多少倍。最多重複3次。
比如:ccc表示300 xx表示20,但150並不用lll表示,這個規則僅適用於i x c m。
如果相鄰級別的大單位在右,小單位在左,表示大單位中扣除小單位。
比如:ix表示9 iv表示4 xl表示40
49 = xlix
更多的示例參見下表,你找到規律了嗎?
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
*** = 30
***iv = 34
***v = 35
***ix = 39
xl = 40
l = 50
li = 51
lv = 55
lx = 60
lxv = 65
l*** = 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行,就是羅馬數字對應的十進位制資料。
例如,使用者輸入:
3l***
xciii
dccii
則程式應該輸出:
8093
#include #include #include // 羅馬數字的列舉解法
int romenum(char* s,int num)
// 補償
if (strstr(s,"iv") != null)
sum -= 2;
if (strstr(s, "ix") != null)
sum -= 2;
if (strstr(s, "xl") != null)
sum -= 20;
if (strstr(s, "xc") != null)
sum -= 20;
if (strstr(s, "cd") != null)
sum -= 200;
if (strstr(s, "cm") != null)
sum -= 200;
return sum;
}void main()
才發現原來c++的string類裡有strstr(s,subs) 可以用來查詢子串(返回值為子串index,沒有則返回null)! 藍橋杯 羅馬數字
題目 古羅馬帝國開創了輝煌的人類文明,但他們的數字表示法的確有些繁瑣,尤其在示 大數的時候,現在看起來簡直不能忍受,所以在現代很少使用了。之所以這樣,不 是因為發明表示法的人的智力的問題,而是因為乙個宗教的原因,當時的宗教禁止 在數字 現 0 的概念!羅馬數字的表示主要依賴以下幾個基本符號 i 1 ...
藍橋杯 羅馬數字問題
羅馬數字 問題描述 古羅馬帝國開創了輝煌的人類文明,但他們的數字表示法的確有些繁瑣,尤其在表示大數的時候,現在看起來簡直不能忍受,所以在現代很少使用了。之所以這樣,不是因為發明表示法的人的智力的問題,而是因為乙個宗教的原因,當時的宗教禁止在數字中出現0的概念!羅馬數字的表示主要依賴以下幾個基本符號 ...
藍橋杯 羅馬數字的轉化
古羅馬帝國開創了輝煌的人類文明,但他們的數字表示法的確有些繁瑣,尤其在表示大數的時候,現在看起來簡直不能忍受,所以在現代很少使用了。之所以這樣,不是因為發明表示法的人的智力的問題,而是因為乙個宗教的原因,當時的宗教禁止在數字中出現0的概念!羅馬數字的表示主要依賴以下幾個基本符號 i 1 v 5 x ...