罗马数字转阿拉伯数字

1 罗马数字是位置计数吗?他的缺点是什么?
通过查阅资料:位置计数是一种表达数字的系统,数位按照顺序排列 ,每个数位有一个位值,数字的值是每个数位和位值的乘积之和。罗马数字采用七个罗马字母作数字、即Ⅰ(1)、X(10)、C(100)、M(1000)、V(5)、L(50)、D(500)。
记数的方法:
相同的数字连写,所表示的数等于这些数字相加得到的数,如 Ⅲ=3;
小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数,如 Ⅷ=8、Ⅻ=12;
小的数字(限于 Ⅰ、X 和 C)在大的数字的左边,所表示的数等于大数减小数得到的数,如 Ⅳ=4、Ⅸ=9;
所以罗马数字不是位置计数。
缺点:书写困难,规则繁杂,没有数字0,难以被计算机储存并使用,计算难度大。

2 把8位学号转化成罗马数字
8为学号20221305 罗马数字无法表示0,将8位学号分成2组,每组四个数字,即MMXXII MCCCV
3 参考上面的博客,用Pyhton写一个罗马数字转化为阿拉伯数字的程序,并验证上面你的学号对不对
参考代码

include<bits/stdc++.h>

using namespace std;
class Solution {
public:
int romanToInt(string s) {
int l=s.length();
int pre=0,now=0,ans=0;
for(int i=0;i<l;i++){
if(s[i]'I'){ now=1;
if(i+1<l&&s[i+1]
'V') { now=4; i++; }
else if(i+1<l&&s[i+1]'X') { now=9; i++; }
}
else if(s[i]
'X') { now=10;
if(i+1<l&&s[i+1]'L') { now=40; i++; }
else if(i+1<l&&s[i+1]
'C') { now=90; i++; }
}
else if(s[i]'C') { now=100;
if(i+1<l&&s[i+1]
'D') { now=400; i++; }
else if(i+1<l&&s[i+1]'M') { now=900; i++; }
}
else if(s[i]
'M') { now=1000; }
else if(s[i]'V') { now=5; }
else if(s[i]
'L') { now=50; }
else if(s[i]=='D') { now=500; }

        ans+=now;
    }
    return ans;
}

};
int main()
{
Solution b;
cout<<b.romanToInt("MMXXIIMCCCV")<<endl;

return 0;

}

posted on 2022-09-15 11:04  20221305赵月溪  阅读(22)  评论(0)    收藏  举报

导航