返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++怎么实现罗马数字转化成整数
  • 262
分享到

C++怎么实现罗马数字转化成整数

2023-06-20 15:06:46 262人浏览 薄情痞子
摘要

本篇内容介绍了“c++怎么实现罗马数字转化成整数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Roman to Integer 罗马数字转化

本篇内容介绍了“c++怎么实现罗马数字转化成整数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Roman to Integer 罗马数字转化成整数

Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.

Symbol       Value
I                  1
V                 5
X                10
L                 50
C                100
D                500
M                1000

For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII, which is simply X+ II. The number twenty seven is written as XXVII, which is XX + V + II.

Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IIII. Instead, the number four is written as IV. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:

  • I can be placed before V (5) and X(10) to make 4 and 9. 

  • X can be placed before L (50) and C (100) to make 40 and 90. 

  • C can be placed before D (500) and M (1000) to make 400 and 900.

Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.

Example 1:

Input: "III"
Output: 3

Example 2:

Input: "IV"
Output: 4

Example 3:

Input: "IX"
Output: 9

Example 4:

Input: "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

Example 5:

Input: "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.


罗马数转化成数字问题,我们需要对于罗马数字很熟悉才能完成转换。以下截自百度百科:

罗马数字是最早的数字表示方式,比阿拉伯数字早2000多年,起源于罗马。

如今我们最常见的罗马数字就是钟表的表盘符号:Ⅰ,Ⅱ,Ⅲ,Ⅳ(IIII),Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ……

对应阿拉伯数字(就是现在国际通用的数字),就是1,2,3,4,5,6,7,8,9,10,11,12。(注:阿拉伯数字其实是古代印度人发明的,后来由阿拉伯人传入欧洲,被欧洲人误称为阿拉伯数字。)

I - 1

V - 5

X - 10

L - 50

C - 100 

D - 500

M - 1000

相同的数字连写,所表示的数等于这些数字相加得到的数,如:Ⅲ = 3;

小的数字在大的数字的右边,所表示的数等于这些数字相加得到的数, 如:Ⅷ = 8;Ⅻ = 12;

小的数字,(限于Ⅰ、X 和C)在大的数字的左边,所表示的数等于大数减小数得到的数,如:Ⅳ= 4;Ⅸ= 9;

正常使用时,连写的数字重复不得超过三次。(表盘上的四点钟“IIII”例外)

在一个数的上面画一条横线,表示这个数扩大1000倍。

有几条须注意掌握:

基本数字Ⅰ、X 、C 中的任何一个,自身连用构成数目,或者放在大数的右边连用构成数目,都不能超过三个;放在大数的左边只能用一个。

不能把基本数字V 、L 、D 中的任何一个作为小数放在大数的左边采用相减的方法构成数目;放在大数的右边采用相加的方式构成数目,只能使用一个。

V 和X 左边的小数字只能用Ⅰ。

L 和C 左边的小数字只能用X。

D 和M 左边的小数字只能用C。

而这道题好就好在没有让我们来验证输入字符串是不是罗马数字,这样省掉不少功夫。需要用到 HashMap 数据结构,来将罗马数字的字母转化为对应的整数值,因为输入的一定是罗马数字,那么只要考虑两种情况即可:

第一,如果当前数字是最后一个数字,或者之后的数字比它小的话,则加上当前数字。

第二,其他情况则减去这个数字。

解法一:

class Solution {public:    int romanToInt(string s) {        int res = 0;        unordered_map<char, int> m{{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};        for (int i = 0; i < s.size(); ++i) {            int val = m[s[i]];            if (i == s.size() - 1 || m[s[i+1]] <= m[s[i]]) res += val;            else res -= val;        }        return res;    }};

我们也可以每次跟前面的数字比较,如果小于等于前面的数字,先加上当前的数字,比如 "VI",第二个字母 'I' 小于第一个字母 'V',所以要加1。如果大于的前面的数字,加上当前的数字减去二倍前面的数字,这样可以把在上一个循环多加数减掉,比如 "IX",我们在 i=0 时,加上了第一个字母 'I' 的值,此时结果 res 为1。当 i=1 时,字母 'X' 大于前一个字母 'I',这说明前面的1是要减去的,而由于前一步不但没减,还多加了个1,所以此时要减去2倍的1,就是减2,所以才能得到9,整个过程是 res = 1 + 10 - 2 = 9,参见代码如下:

解法二:

class Solution {public:    int romanToInt(string s) {        int res = 0;        unordered_map<char, int> m{{'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000}};        for (int i = 0; i < s.size(); ++i) {            if (i == 0 || m[s[i]] <= m[s[i - 1]]) res += m[s[i]];            else res += m[s[i]] - 2 * m[s[i - 1]];        }        return res;    }};

“C++怎么实现罗马数字转化成整数”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: C++怎么实现罗马数字转化成整数

本文链接: https://lsjlt.com/news/297893.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++怎么实现罗马数字转化成整数
    本篇内容介绍了“C++怎么实现罗马数字转化成整数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Roman to Integer 罗马数字转化...
    99+
    2023-06-20
  • C++实现将整数转化成罗马数字
    本篇内容介绍了“C++实现将整数转化成罗马数字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Integer to Roman 整数转化成罗马...
    99+
    2023-06-20
  • C++实现LeetCode(12.整数转化成罗马数字)
    [LeetCode] 12. Integer to Roman 整数转化成罗马数字 Roman numerals are represented by seven different...
    99+
    2024-04-02
  • C++实现LeetCode(13.罗马数字转化成整数)
    [LeetCode] 13. Roman to Integer 罗马数字转化成整数 Roman numerals are represented by seven different...
    99+
    2024-04-02
  • C#算法之罗马数字转整数
    罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I ...
    99+
    2024-04-02
  • Python实现将罗马数字转换成普通阿拉伯数字的方法
    本文实例讲述了Python实现将罗马数字转换成普通阿拉伯数字的方法。分享给大家供大家参考,具体如下: 罗马数字,我们在某些电视中或者现实生活中都曾经看到过,近日,学习Python时,也遇到了罗马数字的解说,...
    99+
    2022-06-04
    罗马数字 阿拉伯数字 转换成
  • C++怎么实现字符串转为整数
    今天小编给大家分享一下C++怎么实现字符串转为整数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。String to Inte...
    99+
    2023-06-19
  • C语言实现将字符串转换成整数
    目录准备工作1.NULL指针2.空字符串3.空格4.正负号5.非法字符6.越界测试总结这是一个很有意思的问题。请不要把这个问题想的太简单了,考虑问题时应该尽可能的全面一些。请先思考并...
    99+
    2023-05-14
    C语言字符串转整数 C语言 字符串 整数
  • c语言字符串怎么转换成整数
    在C语言中,可以使用`atoi()`函数将字符串转换为整数。`atoi()`函数的声明如下:```int atoi(const ch...
    99+
    2023-09-21
    c语言
  • C++怎么实现数字取整
    本篇内容介绍了“C++怎么实现数字取整”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!问题描述写出一个程序,接受一个正浮点数值,输出该数值的近...
    99+
    2023-06-19
  • C语言如何实现将字符串转换成整数
    本文小编为大家详细介绍“C语言如何实现将字符串转换成整数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现将字符串转换成整数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。这是一个很有意思的问题。请不要...
    99+
    2023-07-05
  • python整数转字符串怎么实现
    要将一个整数转换为字符串,可以使用内置的str()函数将整数转换为字符串类型。例如: num = 123 str_num = str...
    99+
    2024-03-12
    python
  • C++实现LeetCode(8.字符串转为整数)
    [LeetCode] 8. String to Integer (atoi) 字符串转为整数 Implement atoi which converts...
    99+
    2024-04-02
  • c语言怎么将小数转换成整数
    在C语言中,可以使用类型转换来将小数转换成整数。具体的方法有两种: 强制类型转换:可以使用强制类型转换运算符将小数强制转换成整数。...
    99+
    2024-02-29
    c语言
  • php如何实现数字转化成大写
    小编给大家分享一下php如何实现数字转化成大写,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php实现数字转化成大写的方法:1、通过“toChineseNumbe...
    99+
    2023-06-15
  • c++字符串怎么转化为数字
    在C++中,可以使用以下方法将字符串转换为数字: 使用stoi()函数将字符串转换为整数。stoi()函数接受一个字符串参数,并返...
    99+
    2024-02-29
    c++
  • c#字符串怎么转化为数字
    在C#中,可以使用int.Parse、Convert.ToInt32或int.TryParse方法将字符串转化为数字。 使用int...
    99+
    2024-03-05
    c#
  • C#实现数字转换
    本文实例为大家分享了C#实现数字转换的具体代码,供大家参考,具体内容如下 1 题目描述:数字转换 从键盘接收一个字符串,将其转换成一个double类型的数据,若转换成功,则显示转换之...
    99+
    2024-04-02
  • c语言字符串转数字怎么实现
    在C语言中,可以使用标准库函数atoi()和atol()来将字符串转换为整数和长整数。具体实现如下: #include <st...
    99+
    2024-03-08
    c语言
  • C++实现LeetCode(7.翻转整数)
    [LeetCode] 7. Reverse Integer 翻转整数 Given a 32-bit signed integer, reverse digits of an inte...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作