如果对转换规则不清楚的童鞋可以点击:整型数与罗马数的转换规则
lz用的方法,最简单也最啰嗦,好像没有啥算法可言,一起学习学习
char* intToRoman(int num) {
char *pNum = (char*)malloc(sizeof(char) * 100);
char *digit[10] = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
char *ten[10] = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
char *hundred[10]= { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
char* thousand[4] = { "", "M", "MM", "MMM" };
int number[3999];
int numTmp = num;
int count = 0, i = 0;
while (numTmp != 0)
{
numTmp /= 10;
count++;
}
int len = count;
while (count > 0)
{
int tmp = num / pow(10, count - 1);
number[i++] = tmp ;
num = num - tmp * pow(10, count - 1);
count--;
}
int j = 0;
switch (len)
{
case 1: {
pNum = digit[number[j]];
break;
}
case 2: {
strcat(pNum, ten[number[j]]);
j++;
strcat(pNum, digit[number[j]]);
if (j >= len-1)
break;
}
case 3: {
strcat(pNum,hundred[number[j]]);//此处需要注意:使用strcat可以将所有的字符串连在一起,然后返回
j++;
strcat(pNum, ten[number[j]]);
j++;
strcat(pNum, digit[number[j]]);
if (j >= len-1)
break;
}
case 4: {
strcat(pNum, thousand[number[j]]);
j++;
strcat(pNum,hundred[number[j]]);
j++;
strcat(pNum, ten[number[j]]);
j++;
strcat(pNum, digit[number[j]]);
if(j>=len-1)
break;
}
}
return pNum;
}