如何将罗马数字翻译或处理为十进制数字,反之亦然?我想在 C 中执行此操作。想法是获取数字或字母并进行处理。
这是一个例子:
MDXXIII = One thousand five hundred and twenty-three
One thousand five hundred and twenty-one = MDXXI
如何将罗马数字翻译或处理为十进制数字,反之亦然?我想在 C 中执行此操作。想法是获取数字或字母并进行处理。
这是一个例子:
MDXXIII = One thousand five hundred and twenty-three
One thousand five hundred and twenty-one = MDXXI
从十进制到罗马非常简单;反过来就有点棘手了。
罗马数字有几组规则;让我们以最常见的一个为例:
I
一V
五X
十L
五十C
一百D
五百M
一千II
二III
三XX
二十XXX
三十VI
六IV
四XI
十一DI
五十一CX
一百一十XC
九十ab
如果a >= b
(例如:II
,,VI
)ba
如果5b = a
或10b = a
(例如:IV
, XD
, IX
, XC
)III
and IV
,XXX
and XD
)或四个(例如:IIII
代替IV
和XXXX
代替XD
),但不会多或少。提示:一个碱基到另一个碱基的转换最好从数字的最小部分到最大部分进行。
一个简单的方法是读取整个罗马数字字符串,然后从后面处理字符串。
例如:XIV 你从 V 开始,= 5 向后移动 1,现在是 I,I 小于 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 步:停止