代表罗马数字的年份

时间:2011-06-29 06:03:26

标签: c algorithm roman-numerals

  

可能重复:
  How to convert integer value to Roman numeral string?

回到我的大学时代,当我学习C时,所有我都遇到了以相应的罗马数字形式表示一年的问题。该文中没有解决方案,因为这是一些值得思考的额外问题。我能想到的只是使用模数运算符和一堆ifs。我想知道是否有人可以给我一个合适的解决方案。可以使用简单的算法或对所用逻辑的解释。

1 个答案:

答案 0 :(得分:5)

这是小于4,000的数字的逻辑。 (请参阅下文,了解上述内容。)有一个基本的4步算法适用于每个级别。

  1. 确定数字中的千位数:floor(number / 1000)。输出许多“M”并从数字中减去数千。此时,该数字小于1,000。

  2. 如果数字>> = 900,则输出“CM”并减去900.

  3. 如果数字>> 500,则输出“D”并减去500.

  4. 如果数字>> = 400,则输出“CD”并减去400.

  5. 此时,该数字保证<&lt;我们遵循类似的模式将数量减少到40以下:

    1. 确定数字中的数百个,输出多个“C”并从数字中减去数百个。此时,该数字小于100.

    2. 如果数字>&gt; = 90,则输出“XC”并减去900.

    3. 如果数字>&gt; = 50,则输出“L”并减去50。

    4. 如果数字>&gt; = 40,则输出“XL”并减去40。

    5. 此时,该数字保证<&lt;我们使用“X”,“IX”,“V”和“IV”重复完全相同的逻辑。我们使用数字(保证为&lt; 4)作为输出“I”的数量来完成。

      对于较大的数字,逻辑仍然相同,我们只使用顶部带条形的标准符号。每个条形代表没有该条形的值的1,000倍。 (所以带条的V等是5000等)