You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

基于这个规则,咱们可以这样设计代码逻辑:

步骤拆解

  1. 先做一个字符-值映射表,这样每次遇到罗马字符就能快速拿到对应的整数,不用反复写判断
  2. 初始化一个结果变量,用来存最终的整数
  3. 遍历输入的罗马数字字符串:
    • 每次取当前字符对应的值,再看看下一个字符的值(如果有的话)
    • 如果当前值 < 下一个值,就把当前值从结果里减去
    • 否则就把当前值加到结果里
  4. 遍历结束后返回结果就行

完整代码实现

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 18:37:37