题目12:
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
/***************************************************************************************************
*\Function OneIntToRoman
*\Description 显示每一位的数字
*\Parameter n 每位数字
*\Parameter str 存放结果数组
*\Parameter ptr 数组指针
*\Parameter flag 标记是个位、十位、百位、千位
*\Return int
*\Note
*\Log 2015.07.31 Ver 1.0 凌琨
* 创建函数。
***************************************************************************************************/
int OneIntToRoman(int n, char* str, int ptr, int flag)
{
char left = 0;
char mid = 0;
char right = 0;
switch (flag)
{
case 1: /* 个位 */
left = 'I';
mid = 'V';
right = 'X';
break;
break;
case 2: /* 十位 */
left = 'X';
mid = 'L';
right = 'C';
break;
break;
case 3: /* 百位 */
left = 'C';
mid = 'D';
right = 'M';
break;
case 4: /* 千位 */
left = mid = 'M';
break;
default:
break;
}
switch (n)
{
case 1:
str[ptr++] = left;
break;
case 2:
str[ptr++] = left;
str[ptr++] = left;
break;
case 3:
str[ptr++] = left;
str[ptr++] = left;
str[ptr++] = left;
break;
case 4:
str[ptr++] = left;
str[ptr++] = mid;
break;
case 5:
str[ptr++] = mid;
break;
case 6:
str[ptr++] = mid;
str[ptr++] = left;
break;
case 7:
str[ptr++] = mid;
str[ptr++] = left;
str[ptr++] = left;
break;
case 8:
str[ptr++] = mid;
str[ptr++] = left;
str[ptr++] = left;
str[ptr++] = left;
break;
case 9:
str[ptr++] = left;
str[ptr++] = right;
default:
break;
}
return ptr;
}
char* intToRoman(int num)
{
int temp = 0;
int len = 1;
int mul = 1;
int i = 0;
int dec = 0;
int ptr = 0;
temp = num;
RomanStr = (char*)malloc(100);
while (temp / 10 != 0)
{
mul *= 10;
temp /= 10;
len++;
}
temp = num;
/* 从高位依次进行显示存放 */
while (len--)
{
dec = temp / mul;
ptr = OneIntToRoman(dec, RomanStr, ptr, len+1);
temp %= mul;
mul /= 10;
}
RomanStr[ptr] = '\0';
return RomanStr;
}