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 2025-02-14 14:59 Hello-World3 阅读(0) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!