如何将罗马数字翻译或处理为单词中的十进制数,反之亦然?我想在C中这样做。想法是获取数字或字母并处理它。
以下是一个例子:
MDXXIII = One thousand five hundred and twenty-three
One thousand five hundred and twenty-one = MDXXI
答案 0 :(得分:2)
从十进制到罗马非常简单;反过来说有点棘手。
罗马数字有几套规则;让我们来看看最常见的一个:
I
一个V
五X
十L
五十C
一百D
五百M
一千II
两个III
三XX
二十二XXX
三十岁VI
六IV
四XI
十一DI
五十一CX
一百零一个XC
九十ab
if a >= b
(例如:II
,VI
)ba
如果5b = a
或10b = a
(例如:IV
,XD
,IX
,XC
)III
和IV
,XXX
和XD
)或4(例如:{{ 1}}代替IIII
和IV
代替XXXX
),但绝不会更多或更少。提示:从一个基数到另一个基数的转换最好从数字的最小部分到最大部分进行。
答案 1 :(得分:1)
一种简单的方法是读取整个罗马数字字符串,然后从后面处理字符串。
例如: XIV以V开头,= 5后退1,现在它是我,我不到 V现在减去1,即4。然后你回到X,现在 X大于I,因此将10加到前面的值(即4), 然后变为
4+10 = 14.
第1步:开始
第2步:将罗马数字读为字符串
第3步:查找罗马数字的长度
第4步:表示字符串中的每个字符
1. if(char = I) then decimal = 1
2. if(char = V) then decimal = 5
3. if(char = X) then decimal = 10
4. if(char = L) then decimal = 50
5. if(char = C) then decimal = 100
6. if(char = D) then decimal = 500
7. if(char = M) then decimal = 1000
8. otherwise invalid character
步骤5:重复步骤4,直到字符串长度为止
第6步: k = char [length - 1]
步骤7:为每个十进制字符串
if(decimal[i] > decimal[i - 1]) then k = k - decimal[i - 1]
else if(decimal[i] = decimal[i - 1 or decimal[i] < decimal[i - 1) then k = k + decimall[i - 1]
第8步:重复第7步,直至小数字符串长度
第9步:打印小数值
第10步:停止