计蒜客——整数转化为罗马数字的一点体会:
首先想到的思路是单独一个一个的把输入的数字拆分开来,每一位对应的数字转化成罗马数字,建立{由于题目限制}(1-3999)四个数组分别代表unit、ten、hundred、thousands四个数组分别内部表示1-9每个数字,
char* String_thousand[3]={"M","MM","MMM"};
char* String_hundred[9]={"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char* String_ten[9]={"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char* String_unit[9]={"I","II","III","IV","V","VI","VII","VIII","IX"};
char* String_Temp=NULL;
然后就是将输入的数字拆分分别对应
thousand=num/1000;
hundred=num/100-10*(num/1000);
ten=num/10-10*(num/100);
unit=num%1000%100%10;
然后进行每位数字的判断。
其网上最优解法是用了一个二维数组代替
static char *roman[][10]={"","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"};
然后通过一个for循环解决分离每一位的问题
-
for(j = 0, i = 10000; j < 4; ++j, i/=10)
-
{
-
n = (num%i) / (i/10);
-
printf("%s",roman[3-j][n]);
-
}