LeetCode | 13 罗马数字转整数
程序员文章站
2022-03-01 17:01:38
...
别人的思路借鉴:
用字典存储各个罗马数字代表的阿拉伯数字
按顺序读取罗马数字,当前数字小于下一个数字,则是下一个数字减去当前数字,否则直接相加
比如IV就是*-1+5=4*,而IIV这种情况是不存在的,对于其他量级的数字也是同理。
实际处理的时候最后一个数字无法和它下一个数字比较,因为不存在下一个数字。
但是最后一个数字永远是加的而不是减的,所以就单独拎出来处理就好。
class Solution {
public:
int romanToInt(string s) {
int sum = 0;
char c[] = { 'I','V','X','L','C','D','M' };
int q[] = { 1,5,10,50,100,500,1000 };
for (int i = 0; i < s.size(); i++)
{
int z1 = 0, z2 = 0;
switch (s[i])
{
case 'I':
z1 = q[0]; break;
case 'V':
z1 = q[1]; break;
case 'X':
z1 = q[2]; break;
case 'L':
z1 = q[3]; break;
case 'C':
z1 = q[4]; break;
case 'D':
z1 = q[5]; break;
case 'M':
z1 = q[6]; break;
}
switch (s[i + 1])
{
case 'I':
z2 = q[0]; break;
case 'V':
z2 = q[1]; break;
case 'X':
z2 = q[2]; break;
case 'L':
z2 = q[3]; break;
case 'C':
z2 = q[4]; break;
case 'D':
z2 = q[5]; break;
case 'M':
z2 = q[6]; break;
}
if (z1 < z2)
{
sum += -z1;
}
else
{
sum += z1;
}
z1 = 0;
z2 = 0;
}
return sum;
}
};
测试代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int romanToInt(string s)
{
int sum = 0;
char c[] = { 'I','V','X','L','C','D','M' };
int q[] = { 1,5,10,50,100,500,1000 };
for (int i = 0; i < s.size(); i++)
{
int z1 = 0, z2 = 0;
switch (s[i])
{
case 'I':
z1 = q[0];break;
case 'V':
z1 = q[1];break;
case 'X':
z1 = q[2];break;
case 'L':
z1 = q[3];break;
case 'C':
z1 = q[4];break;
case 'D':
z1 = q[5];break;
case 'M':
z1 = q[6];break;
}
switch (s[i+1])
{
case 'I':
z2 = q[0];break;
case 'V':
z2 = q[1];break;
case 'X':
z2 = q[2];break;
case 'L':
z2 = q[3];break;
case 'C':
z2 = q[4];break;
case 'D':
z2 = q[5];break;
case 'M':
z2 = q[6];break;
}
if (z1 < z2)
{
sum += - z1;
}
else
{
sum += z1;
}
z1 = 0;
z2 = 0;
}
return sum;
}
int main()
{
string s= "MCMXCIV";
int a = romanToInt(s);
while (1)
{
getchar();
}
return 0;
}
上一篇: swift基础
下一篇: js数组方法Array.fill
推荐阅读
-
Bartender2016打印出来的EAN13码没有出头该怎么办?
-
宁夏即将改名的大学:矿大银川学院改宁夏科技学院?附转设最新消息
-
2021年宁夏独立学院转设最新消息:中国矿业大学银川学院转设后的名字叫什么?
-
2021山东独立学院转设最新情况:山东省新增两所所本科高校?
-
四川大学锦城学院转设最新消息(改名锦城学院):四川大学锦城学院转公办还是民办?
-
解读三包 给笔记本用户13条建议
-
山东财经大学燕山学院转设公办改名最新消息-官宣山东独立学院转设(截至2021年1月)
-
四川外国语大学成都学院与四川大学锦城学院转设更名大学?附转设最新消息
-
笔记本电脑7200转硬盘性能提升有多少?
-
PHP之浮点数计算比较以及取整数不准确的解决办法