12-m-Integer to Roman

来源:互联网 发布:批量抠图软件 编辑:程序博客网 时间:2024/06/18 06:47

数字转罗马数字。没啥思路,只能想到一个个if判断,但觉得肯定不该这么笨拙,翻了解答,是用了类似map映射的原理,将字母与数字对应起来,而且将要用减法的4和9直接做了映射,于是剩下的数字组合都是用加法实现,因此循环就可以了。

如下:

char* intToRoman(int num) {    int size = 16;    char *result = (char *)malloc(sizeof(char) * size);    memset(result, 0, sizeof(char) * size);        int numbers[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};    char *romans[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};    int n = 0;    for (int i = 0; num > 0; i++) {        n = num / numbers[i];        num = num % numbers[i];        for (int j = 0; j < n; j++)            strcat(result, romans[i]);    }        return result;}

话说c做这种题目还真是费劲,字母还得一个个加进去,c++的话运算符重载就可以了。

0 0
原创粉丝点击