Leetcode12-整数转罗马数字

发布于:2025-03-28 ⋅ 阅读:(29) ⋅ 点赞:(0)

题目链接:12. 整数转罗马数字 - 力扣(LeetCode)

看题目限制输入1 <= num <= 3999,就直接用暴力法写了,还比较简单

代码:

char* intToRoman(int num) {
    char *res = (char*)malloc(100);
    int index = 0;
    int temp;
    temp = num / 1000;
    for (int i = 0; i < temp; i++) {
        res[index] = 'M';
        index++;
    }
    num = num % 1000;
    temp = num / 100;
    if (0 <= temp && temp <=3) {
        for (int i = 0; i < temp; i++) {
            res[index++] = 'C';
        }
    }
    if (temp == 4) {
        res[index++] = 'C';
        res[index++] = 'D';
    }
    if (5 <= temp && temp <= 8) {
        res[index++] = 'D';
        for (int i = 0; i < temp-5; i++) {
            res[index++] = 'C';
        }
    }
    if (temp == 9) {
        res[index++] = 'C';
        res[index++] = 'M';
    }
    num = num % 100;
    temp = num / 10;
    if (0 <= temp && temp <=3) {
        for (int i = 0; i < temp; i++) {
            res[index++] = 'X';
        }
    }
    if (temp == 4) {
        res[index++] = 'X';
        res[index++] = 'L';
    }
    if (5 <= temp && temp <= 8) {
        res[index++] = 'L';
        for (int i = 0; i < temp-5; i++) {
            res[index++] = 'X';
        }
    }
    if (temp == 9) {
        res[index++] = 'X';
        res[index++] = 'C';
    }
    temp = num % 10;
    if (0 <= temp && temp <=3) {
        for (int i = 0; i < temp; i++) {
            res[index++] = 'I';
        }
    }
    if (temp == 4) {
        res[index++] = 'I';
        res[index++] = 'V';
    }
    if (5 <= temp && temp <= 8) {
        res[index++] = 'V';
        for (int i = 0; i < temp-5; i++) {
            res[index++] = 'I';
        }
    }
    if (temp == 9) {
        res[index++] = 'I';
        res[index++] = 'X';
    }
    res[index] = '\0';

    return res;
}