我知道如何做到这一点并制定了一个过去这样做的程序,但它从未包含罗马数字的特殊情况(例如IV = 4)。以简约的方式将其集成到功能程序中是我的主要问题。有没有办法做到这一点?
答案 0 :(得分:1)
一个非常简单的解决方案,在伪代码中,可能看起来像这样:
value = get_the_value_to_convert();
divider = 1000; // Start at 1000 (M)
while (value > 0)
{
count = value / divider;
value = value % divider;
for (i = 0; i < count; ++i)
print(roman_numeral_from_number(divider));
divider /= 10;
}
roman_numeral_from_numbe
函数在数字和罗马数字之间进行一对一的映射。
例如5432
作为输入,它将打印MMMMMCCCCXXXII
。
为了获得更好的结果,请每隔一次将divider
变量与2
和5
分开。
要获得更好的结果,请添加对某些数字的检查,例如90
等于"XC"
。
请注意,即使进行了修改,上述算法也无法处理非常大的数字,但另一方面Wikipedia表示历史上它只用于小数字。