罗马数字转换成整数

关键点: 临界点V判断 :如果后面一位大于前面一位,后面一位减去前面一位。
如果后面一位小于前面一位,两者相加。

public class Program {


    static void Main(string [] args)
    {
        Console.WriteLine(romanToInt("CD"));

        Console.ReadKey();

    }

    public static int romanToInt(String s)
    {
        int len = s.Length;
        //字符串切分为数组
        char[] str = s.ToCharArray();
        int num = ChartoInt(str[0]);//最后转化出来的数字
        for (int i = 0; i < len - 1; i++)
        {
            //将罗马数字一个一个送进来,如果左边的字符比右边的字符大,则左边的字符加上右边的字符
            if (ChartoInt(str[i]) >= ChartoInt(str[i + 1]))
            {
                num += ChartoInt(str[i + 1]);
            }
            //如果左边的字符比右边的字符小,则右边的字符减去左边的字符
            else
            {
                num -= ChartoInt(str[i]);
                num += ChartoInt(str[i + 1]) - ChartoInt(str[i]);
            }
        }
        return num;
    }

    static int ChartoInt(char str)
    {
        int num = 0;
        switch (str)
        {
            case 'I':
                num = 1;
                break;
            case 'V':
                num = 5;
                break;
            case 'X':
                num = 10;
                break;
            case 'L':
                num = 50;
                break;
            case 'C':
                num = 100;
                break;
            case 'D':
                num = 500;
                break;
            case 'M':
                num = 1000;
                break;
        }
        return num;
    }



}

罗马数字整数的C语言实现通常会涉及到一个映射表 `_roman_value[]`,它存储了每个罗马数字字符对应的值。以下是简单的C代码实现,包括一个函数 `roman_to_int` 来完成转换: ```c #include <stdio.h> #include <string.h> const char roman_numerals[] = "MDCLXVI"; const int roman_values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; const int values_length = sizeof(roman_values) / sizeof(roman_values[0]); int roman_to_int(char* roman_numeral) { int result = 0; int prev_value = 0; for (int i = values_length - 1; i >= 0; i--) { while (roman_numeral[i] != &#39;\0&#39; && roman_numeral[i] <= roman_numerals[i]) { result += roman_values[i]; roman_numeral++; } if (roman_numeral[i] > roman_numerals[i]) { result -= 2 * prev_value; roman_numeral++; } else { prev_value = roman_values[i]; } } return result; } int main() { char roman_input[20]; printf("Enter a Roman numeral: "); fgets(roman_input, sizeof(roman_input), stdin); roman_input[strcspn(roman_input, "\n")] = &#39;\0&#39;; // Remove newline from input int integer_result = roman_to_int(roman_input); printf("The equivalent integer value is: %d\n", integer_result); return 0; } ``` 在这个例子中,我们从最大的罗马数字字符开始遍历,遇到小于当前字符的数字就加上其值;如果遇到更大的数字,则减去前一个字符的两倍值(除非这是最大字符,那就不做处理)。这个过程重复直到遍历完整个输入字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值