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

C++ C++;:十进制到罗马数字的转换,c++,string-conversion,C++,String Conversion,我知道如何做到这一点,并在过去制作了一个这样做的程序,但它从未包含罗马数字的特殊情况(例如IV=4)。以最简单的方式将其集成到功能程序中是我的主要问题。有没有一个好方法可以做到这一点?一个非常简单的解决方案,在伪代码中,可能是这样的: value = get_the_value_to_convert(); divider = 1000; // Start at 1000 (M) while (value > 0) { count = value / divider; v

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

一个非常简单的解决方案,在伪代码中,可能是这样的:

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;
}
value=get_值_to_convert();
分隔器=1000;//从1000(米)开始
而(值>0)
{
计数=值/除法器;
值=值%分隔符;
对于(i=0;i
roman\u number\u from\u number
函数在数字和罗马数字之间进行一对一映射

例如,
5432
作为输入,它将打印
mmmmmmccxxxii

为了获得更好的结果,请每秒使用
2
5
divider
变量进行一次分割

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


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

如果您知道,创建它们也应该很容易。它只是除法、模和循环中的do字符串,将特定字符串连接到另一个字符串。是的,但有什么例子?我知道如何读给他们听,只是很难运用特殊情况。我可能只是想得太多了,但我只是想知道该怎么做。如果我问@JoachimPileborg,您的实现是什么?使用一个包含所有一位和两位数字及其值的表,您可以从M(1000)到I(1)搜索第一个值>=您要转换的值。将该字符串连接到结果并减去相应的值。重复,太棒了,非常感谢!对于“罗马数字”方法,它看起来像
值>=1000吗?roman_year+=“M”:…
?而且,您甚至没有在循环中使用
i
变量,因此从技术上讲,您甚至不需要循环语句或计数变量。