如何在C#中实现罗马数字转整数?编程新手求助(附初始方法模板)
如何在C#中实现罗马数字转整数?
嘿,作为编程新手碰到这个问题太正常了!我来一步步帮你理清思路,然后给出能直接跑的代码,保证你能看懂~
首先,咱们得先明确罗马数字的核心规则:
- 罗马数字由7个基本字符组成,对应的值是:
I=1,V=5,X=10,L=50,C=100,D=500,M=1000 - 正常情况下,大值的字符在前面,直接累加就行(比如
III就是1+1+1=3) - 特殊情况是小值字符在大值前面,这时候要做减法(比如
IV是5-1=4,IX是10-1=9,XL是50-10=40)
基于这个规则,咱们可以这样设计代码逻辑:
步骤拆解
- 先做一个字符-值映射表,这样每次遇到罗马字符就能快速拿到对应的整数,不用反复写判断
- 初始化一个结果变量,用来存最终的整数
- 遍历输入的罗马数字字符串:
- 每次取当前字符对应的值,再看看下一个字符的值(如果有的话)
- 如果当前值 < 下一个值,就把当前值从结果里减去
- 否则就把当前值加到结果里
- 遍历结束后返回结果就行
完整代码实现
public int RomanToInt(string s) { // 构建罗马字符到整数的映射字典 var romanMap = new Dictionary<char, int> { {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000} }; int result = 0; // 遍历字符串,注意只到倒数第二个字符,避免越界 for (int i = 0; i < s.Length - 1; i++) { int currentValue = romanMap[s[i]]; int nextValue = romanMap[s[i+1]]; if (currentValue < nextValue) { result -= currentValue; } else { result += currentValue; } } // 最后加上最后一个字符的值,因为上面的循环没处理它 result += romanMap[s[s.Length - 1]]; return result; }
代码解释&测试示例
咱们拿题目里的示例Input: s = "III"来走一遍流程:
- 循环遍历前2个字符(索引0和1),每个
I对应的值都是1,都大于等于下一个值,所以每次加1,此时result=2 - 最后加上最后一个
I的值1,result变成3,正好是输出结果
再举个复杂点的例子,比如"MCMXCIV":
- M(1000) >= C(100) → 加1000,result=1000
- C(100) < M(1000) → 减100,result=900
- M(1000) >= X(10) → 加1000,result=1900
- X(10) < C(100) → 减10,result=1890
- C(100) >= I(1) → 加100,result=1990
- I(1) < V(5) → 减1,result=1989
- 最后加V(5) → result=1994,正确!
这样是不是就清晰多啦?你可以把这段代码复制过去测试,调整不同的罗马数字试试效果~
内容的提问来源于stack exchange,提问作者Uthmaan Adams
相关产品推荐
相关产品推荐

