罗马数字到字母

时间:2016-08-21 03:01:45

标签: c roman-numerals letters-and-numbers

如何将罗马数字翻译或处理为单词中的十进制数,反之亦然?我想在C中这样做。想法是获取数字或字母并处理它。

以下是一个例子:

MDXXIII = One thousand five hundred and twenty-three
One thousand five hundred and twenty-one = MDXXI

2 个答案:

答案 0 :(得分:2)

从十进制到罗马非常简单;反过来说有点棘手。

罗马数字有几套规则;让我们来看看最常见的一个:

  • 五和十的倍数的符号是
    • I一个
    • V
    • X
    • L五十
    • C一百
    • D五百
    • M一千
  • 之间的值可以通过连接相同字符的倍数来完成
    • II两个
    • III
    • XX二十二
    • XXX三十岁
  • 之间的值可以通过连接不同字符的倍数来完成
    • VI
    • IV
    • XI十一
    • DI五十一
    • CX一百零一个
    • XC九十
  • 禁止使用某些组合,更好:仅允许以下组合
    • ab if a >= b(例如:IIVI
    • ba如果5b = a10b = a(例如:IVXDIXXC
  • 例外:
    • 有时相同值的连接符号的最大数量为3(例如:IIIIVXXXXD)或4(例如:{{ 1}}代替IIIIIV代替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:为每个十进制字符串

  1. if(decimal[i] > decimal[i - 1]) then k = k - decimal[i - 1]

  2. else if(decimal[i] = decimal[i - 1 or decimal[i] < decimal[i - 1) then k = k + decimall[i - 1]

  3. 第8步:重复第7步,直至小数字符串长度
    第9步:打印小数值
    第10步:停止