罗马数字转阿拉伯数字
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) 收藏 举报
浙公网安备 33010602011771号