C ++:十进制到罗马数字转换

时间:2014-09-16 12:09:10

标签: c++ string-conversion

我知道如何做到这一点并制定了一个过去这样做的程序,但它从未包含罗马数字的特殊情况(例如IV = 4)。以简约的方式将其集成到功能程序中是我的主要问题。有没有办法做到这一点?

1 个答案:

答案 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变量与25分开。

要获得更好的结果,请添加对某些数字的检查,例如90等于"XC"

请注意,即使进行了修改,上述算法也无法处理非常大的数字,但另一方面Wikipedia表示历史上它只用于小数字。