罗马数字转阿拉伯数字
罗马数字转阿拉伯数字
问题的回答
个人理解
罗马数字不是位置计数,基于对这两篇文章的理解罗马数字技术规则和位置计数法可总结为:,而罗马数字是不同数字间的和差运算,不属于位置计数法
缺点:罗马数字没有表示零的数字,同时书写繁难,不能进行数字间的运算,所以广泛性不如阿拉伯数字
基于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;
}