1 条题解

  • 0
    @ 2025-4-9 22:56:47

    题目分析

    本题要求实现一个MCXI数字系统与整数的相互转换工具。MCXI系统使用四个字母(m、c、x、i)表示千位、百位、十位和个位,并可使用前缀数字(2-9)表示倍数。需要实现的功能:

    1. 将MCXI字符串转换为对应整数值
    2. 将两个MCXI字符串的整数值相加
    3. 将和转换为MCXI字符串

    解决思路

    1. MCXI转整数

      • 遍历字符串,如果当前字符是数字(2-9),则与下一个字母组合计算值(数字 * 字母的基值)
      • 如果当前字符是字母,直接加上对应基值
      • 注意字母顺序必须为m、c、x、i,且每个字母最多出现一次
    2. 整数转MCXI

      • 按千位、百位、十位、个位依次处理
      • 对于每位数字:
        • 0:跳过不输出
        • 1:只输出对应字母
        • 2-9:先输出数字再输出字母

    完整代码

    #include <iostream>
    #include <cstring>
    #include <string>
    using namespace std;
    
    int convert_mcxi_to_int(const char* str) {
        int sum = 0;
        for (int i = 0; i < strlen(str); ) {
            if (str[i] >= '2' && str[i] <= '9') {
                int multiplier = str[i] - '0';
                i++;
                switch (str[i]) {
                    case 'm': sum += multiplier * 1000; break;
                    case 'c': sum += multiplier * 100; break;
                    case 'x': sum += multiplier * 10; break;
                    case 'i': sum += multiplier; break;
                }
                i++;
            } else {
                switch (str[i]) {
                    case 'm': sum += 1000; break;
                    case 'c': sum += 100; break;
                    case 'x': sum += 10; break;
                    case 'i': sum += 1; break;
                }
                i++;
            }
        }
        return sum;
    }
    
    string int_to_mcxi(int num) {
        const int units[] = {1000, 100, 10, 1};
        const char letters[] = {'m', 'c', 'x', 'i'};
        string result;
        for (int i = 0; i < 4; i++) {
            int digit = num / units[i];
            num %= units[i];
            if (digit == 0) continue;
            if (digit != 1) {
                result += '0' + digit;
            }
            result += letters[i];
        }
        return result;
    }
    
    int main() {
        int n;
        cin >> n;
        while (n--) {
            string a, b;
            cin >> a >> b;
            int num_a = convert_mcxi_to_int(a.c_str());
            int num_b = convert_mcxi_to_int(b.c_str());
            int sum = num_a + num_b;
            cout << int_to_mcxi(sum) << endl;
        }
        return 0;
    }
    

    代码说明

    1. convert_mcxi_to_int函数

      • 使用指针遍历字符串,通过识别数字和字母分别处理
      • 计算字母对应基值后累加到总和
    2. int_to_mcxi函数

      • 使用数组保存单位与字母的对应关系
      • 按从高到低的顺序处理每位数字,根据数值情况选择输出格式
      • 使用字符串拼接生成结果
    3. 主函数

      • 读入多组测试数据
      • 转换、相加、再转换后输出结果
      • 使用string简化输入处理
    • 1

    信息

    ID
    1685
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者