题目:Integer to Roman
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
【罗马数字】
1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
10~90: {"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
100~900: {"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
1000~3000: {"M", "MM", "MMM"}.
代码:
char* intToRoman(int num) {
int i=0;
//申明“”1,2,3,4,5,6,7,8,9 (10个)
//“”,10,20,30,40,50,60,70,80,90 (10个)
//“”,100,200,300,400,500,600,700,800,900(10个)
//“”,1000,2000,3000(4个)
//这些数字对应的罗马字符
char string[34][5]={
"","I","II","III","IV","V","VI","VII","VIII","IX",
"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC",
"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM",
"","M","MM","MMM"
};
//3999的表示为“MMMCMXCIX”
char* ret=(char *)malloc(sizeof(char)*10); //用char ret[10]=""是不行
for(i=0;i<10;i++) //初始化很重要
{
ret[i]='\0';
}
int digit=0;
while(num!=0)
{
//分别得到个十百千位的数
int tmp=num%10;
//保存ret中的值。
char* t=(char *)malloc(sizeof(char)*10);
strcpy(t,ret);
strcpy(ret,string[digit*10+tmp]);
strcat(ret,t);
digit++;
num=num/10;
}
return ret;
}