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

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

2023-06-20 15:06:21 133人浏览 安东尼
摘要

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

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

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

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 an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.

Example 1:

Input: 3
Output: "III"

Example 2:

Input: 4
Output: "IV"

Example 3:

Input: 9
Output: "IX"

Example 4:

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

Example 5:

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

之前那篇文章写的是罗马数字转化成整数 Roman to Integer, 这次变成了整数转化成罗马数字,基本算法还是一样。由于题目中限定了输入数字的范围 (1 - 3999), 使得题目变得简单了不少。

I - 1

V - 5

X - 10

L - 50

C - 100 

D - 500

M - 1000

例如整数 1437 的罗马数字为 MCDXXXVII, 我们不难发现,千位,百位,十位和个位上的数分别用罗马数字表示了。 1000 - M, 400 - CD, 30 - XXX, 7 - VII。所以我们要做的就是用取商法分别提取各个位上的数字,然后分别表示出来:

100 - C

200 - CC

300 - CCC

400 - CD

500 - D

600 - DC

700 - DCC

800 - DCCC

900 - CM

可以分为四类,100 到 300 一类,400 一类,500 到 800 一类,900 最后一类。每一位上的情况都是类似的,代码如下:

解法一:

class Solution {public:    string intToRoman(int num) {        string res = "";        vector<char> roman{'M', 'D', 'C', 'L', 'X', 'V', 'I'};        vector<int> value{1000, 500, 100, 50, 10, 5, 1};        for (int n = 0; n < 7; n += 2) {            int x = num / value[n];            if (x < 4) {                for (int i = 1; i <= x; ++i) res += roman[n];            } else if (x == 4) {                res = res + roman[n] + roman[n - 1];             } else if (x > 4 && x < 9) {                res += roman[n - 1];                for (int i = 6; i <= x; ++i) res += roman[n];            } else if (x == 9) {                res = res + roman[n] + roman[n - 2];            }            num %= value[n];                    }        return res;    }};

本题由于限制了输入数字范围这一特殊性,故而还有一种利用贪婪算法的解法,建立一个数表,每次通过查表找出当前最大的数,减去再继续查表,参见代码如下:

解法二:

class Solution {public:    string intToRoman(int num) {        string res = "";        vector<int> val{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};        vector<string> str{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};        for (int i = 0; i < val.size(); ++i) {            while (num >= val[i]) {                num -= val[i];                res += str[i];            }        }        return res;    }};

下面这种方法个人感觉属于比较投机取巧的方法,把所有的情况都列了出来,然后直接按位查表,O(1) 的时间复杂度啊,参见代码如下:

解法三:

class Solution {public:    string intToRoman(int num) {        string res = "";        vector<string> v1{"", "M", "MM", "MMM"};        vector<string> v2{"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};        vector<string> v3{"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};        vector<string> v4{"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};        return v1[num / 1000] + v2[(num % 1000) / 100] + v3[(num % 100) / 10] + v4[num % 10];    }};

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

--结束END--

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

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

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

猜你喜欢
  • 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++怎么实现罗马数字转化成整数
    本篇内容介绍了“C++怎么实现罗马数字转化成整数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Roman to Integer 罗马数字转化...
    99+
    2023-06-20
  • C#算法之罗马数字转整数
    罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I ...
    99+
    2024-04-02
  • Python实现将罗马数字转换成普通阿拉伯数字的方法
    本文实例讲述了Python实现将罗马数字转换成普通阿拉伯数字的方法。分享给大家供大家参考,具体如下: 罗马数字,我们在某些电视中或者现实生活中都曾经看到过,近日,学习Python时,也遇到了罗马数字的解说,...
    99+
    2022-06-04
    罗马数字 阿拉伯数字 转换成
  • C语言实现将字符串转换成整数
    目录准备工作1.NULL指针2.空字符串3.空格4.正负号5.非法字符6.越界测试总结这是一个很有意思的问题。请不要把这个问题想的太简单了,考虑问题时应该尽可能的全面一些。请先思考并...
    99+
    2023-05-14
    C语言字符串转整数 C语言 字符串 整数
  • C语言如何实现将字符串转换成整数
    本文小编为大家详细介绍“C语言如何实现将字符串转换成整数”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现将字符串转换成整数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。这是一个很有意思的问题。请不要...
    99+
    2023-07-05
  • 20190502-罗马数字转换为数字
    题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符          数值 I             1 V             5 X             10 L             50...
    99+
    2023-01-31
    罗马数字 转换为 数字
  • Python 如何将integer转化为罗马数(3999以内)
    1,在Python中将integer数转化为罗马数 说明:在罗马数中(3999以内),和阿拉伯数字相似,可以把它分解为个位,十位,百位,千位,然后相加(我是这么认为的+_+),所以这样就简单了,只需把不同位数的基数表...
    99+
    2022-06-02
    Python integer 转化为罗马数
  • 罗马数字与阿拉伯数字转换
    罗马数字与阿拉伯数字对应关系如下: 且“II”表示2,“III”表示3,“IV”表示4,“VI表示6”,“VII”表示7,“VIII”表示8,“IX”表示9,其余的类似。 阿拉伯数转换成罗马数字 class Solution(obje...
    99+
    2023-01-31
    罗马数字 阿拉伯数字
  • c语言怎么将小数转换成整数
    在C语言中,可以使用类型转换来将小数转换成整数。具体的方法有两种: 强制类型转换:可以使用强制类型转换运算符将小数强制转换成整数。...
    99+
    2024-02-29
    c语言
  • vue如何将字符串转化为整数
    这篇文章主要介绍“vue如何将字符串转化为整数”,在日常操作中,相信很多人在vue如何将字符串转化为整数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何将字符串转化为整数”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-06
  • Python如何将数字转化成列表
    小编给大家分享一下Python如何将数字转化成列表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. digitizedef digitize(n):  return list(ma...
    99+
    2023-06-25
  • c#怎么将字符串转化为数字
    在 c# 中,使用 convert.toint32() 方法或其他类似方法转换字符串为数字,例如:int.parse():强制转换并引发异常。int.tryparse():转换后返回成功...
    99+
    2024-05-14
    c#
  • Python练习【3】【罗马数字转换/查
    题目1:罗马数字转换 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M字符 数值I 1V 5X 10L 50...
    99+
    2023-01-31
    罗马数字 Python
  • C++实现LeetCode(8.字符串转为整数)
    [LeetCode] 8. String to Integer (atoi) 字符串转为整数 Implement atoi which converts...
    99+
    2024-04-02
  • C++怎么实现字符串转为整数
    今天小编给大家分享一下C++怎么实现字符串转为整数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。String to Inte...
    99+
    2023-06-19
  • c语言中怎么将字符数字转化为数字
    在C语言中,可以使用库函数atoi()将字符数字转化为数字。该函数的原型如下: int atoi(const char *str);...
    99+
    2024-02-29
    c语言
  • javascript将小数转成整数的方法
    这篇文章给大家分享的是有关javascript将小数转成整数的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。javascript将小数转成整数的方法:首先新建文件,并使用input标签创建数字输入框;然后设置...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作