C语言——整数转化成罗马数字

计蒜客——整数转化为罗马数字的一点体会:

首先想到的思路是单独一个一个的把输入的数字拆分开来,每一位对应的数字转化成罗马数字,建立{由于题目限制}(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循环解决分离每一位的问题

  1. for(j = 0, i = 10000; j < 4; ++j, i/=10)

  2. {

  3. n = (num%i) / (i/10);

  4. printf("%s",roman[3-j][n]);

  5. }

猜你喜欢

转载自blog.csdn.net/Chenxiaoyu99/article/details/81974600