罗马数字转阿拉伯数字

罗马数字转阿拉伯数字

问题的回答

个人理解

罗马数字不是位置计数,基于对这两篇文章的理解罗马数字技术规则位置计数法可总结为:,而罗马数字是不同数字间的和差运算,不属于位置计数法
缺点:罗马数字没有表示零的数字,同时书写繁难,不能进行数字间的运算,所以广泛性不如阿拉伯数字

基于AI

学号转换

由于学号是八位数超过了一般的4999或3999或9999的条件限制,所以无法使用正常的转换规则来进行转换,所以直接转换行不通,因此可以分开讨论2023和1313,则有MMXXIII和MCCCXIII

但基于AI的答案,似乎直接输出没有一个统一解

程序部分

由于并没有学习完python(但在学习的路上),所以验证程序并没有用python来写,而是选择了熟悉的c++(用到了迭代器的map)

#include<bits/stdc++.h> 
#include <map>
using namespace std;

int romanToInt(string s) {
    map<char, int> romanMap;
    romanMap['I'] = 1;
    romanMap['V'] = 5;
    romanMap['X'] = 10;
    romanMap['L'] = 50;
    romanMap['C'] = 100;
    romanMap['D'] = 500;
    romanMap['M'] = 1000;

    int result = 0;
    int prev = 0;

    for (int i = s.length() - 1; i >= 0; i--) {
        int current = romanMap[s[i]];
        if (current >= prev) {
            result += current;
        } else {
            result -= current;
        }
        prev = current;
    }

    return result;
}

int main() {
    string romanNum;
    cout << "请输入罗马数字: ";
    cin >> romanNum;
    int arabicNum = romanToInt(romanNum);
    cout << "转换为阿拉伯数字: " << arabicNum << endl;

    return 0;
}
posted @ 2023-10-15 14:11  Raymongillichmks  阅读(40)  评论(0编辑  收藏  举报