LeetCode-12.整数转化成罗马数字 & LeetCode-13.罗马数字转化成整数


一、整数转化成罗马数字

1. 参考: https://www.jb51.net/article/217252.htm

2. C实现

复制代码
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))

int intToRoman(int num)
{
    int arr[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    char *str[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
    char rom[256] = {0};
    int sz = ARRAY_SIZE(arr);
    int i, idx=0;

    for (i = 0; i < sz; i++) {
        while (num >= arr[i]) {
            num -= arr[i];
            idx += sprintf(rom+idx, "%s", str[i]); //sprintf(char *str, const char *format, ...);
        }
    }
    printf("rom=%s\n", rom);

    return 0;
}

int main()
{
    intToRoman(1437); //rom=MCDXXXVII
    
    return 0;
}

//3437==MMMCDXXXVI
复制代码


二、罗马数字转化成整数

1. 参考: https://www.jb51.net/article/217253.htm

2. 实现

复制代码
#include <stdio.h>
#include <string.h>

#define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0]))

int roman_val(char c)
{
    int i, val = 0;
    int arr[][2] = {{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};

    for (i = 0; i < ARRAY_SIZE(arr); i++) {
        if (c == arr[i][0]) {
            val = arr[i][1];
        }
    }

    return val;
}

int roman_to_int(const char *str)
{
    int i, res = 0;
    int sz = strlen(str);

    for (i = 0; i < sz; i++) {
        if ((i == sz-1) || roman_val(str[i]) >= roman_val(str[i+1]))
            res += roman_val(str[i]);
        else
            res -= roman_val(str[i]);
    }

    return res;
}

//1437==MCDXXXVII


int main()
{
    const char *str = "MCDXXXVII";
    int val;

    val    = roman_to_int(str);

    printf("str=%s, val=%d\n", str, val);
    
    return 0;
}
复制代码

数字转罗马,可以将其拆开来加减,没有将 CD 强制看成一个整体,要将人类思维向计算机思维抽象。

 

posted on   Hello-World3  阅读(0)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示