转换起来还比较麻烦,按照每个位来转化,先从最后面开始。
如果这一位在1~3之间,那么就把这个位的罗马字符添到字符串前面;
如果这一位等于4,那么就把当前罗马字符+这个位前,一位的罗马字符 + 字符串连接起来;
如果这一位在5~8之间,那么就把这个位置前面一位的罗马字符 + 当前罗马字符 + 字符串连接起来;
如果这一位等于9,那么就把当前字符 +前两位字符 +字符串连接起来;
代码如下,耗时32ms。
string intToRoman(int num)
{
if (num < 1 || num > 3999) return NULL;
int bit = 0;
int temp = num;
string result;
while (temp != 0)
{
int dealt = temp % 10;
switch (dealt)
{
case 3:
result = roman[bit] + result;
case 2:
result = roman[bit] + result;
case 1:
{
result = roman[bit] + result;
break;
}
case 4:
{
result = roman[bit + 1] + result;
result = roman[bit] + result;
break;
}
case 8:
result = roman[bit] + result;
case 7:
result = roman[bit] + result;
case 6:
result = roman[bit] + result;
case 5:
result = roman[bit + 1] + result;
break;
case 9:
result = roman[bit + 2] + result;
result = roman[bit] + result;
break;
default:
break;
}
bit += 2;
temp /= 10;
}
return result;
}