广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >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://www.lsjlt.com/news/297894.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 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+
    2022-11-12
  • C++实现LeetCode(13.罗马数字转化成整数)
    [LeetCode] 13. Roman to Integer 罗马数字转化成整数 Roman numerals are represented by seven different...
    99+
    2022-11-12
  • C++怎么实现罗马数字转化成整数
    本篇内容介绍了“C++怎么实现罗马数字转化成整数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Roman to Integer 罗马数字转化...
    99+
    2023-06-20
  • C#算法之罗马数字转整数
    罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I ...
    99+
    2022-11-13
  • 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
  • Python 如何将integer转化为罗马数(3999以内)
    1,在Python中将integer数转化为罗马数 说明:在罗马数中(3999以内),和阿拉伯数字相似,可以把它分解为个位,十位,百位,千位,然后相加(我是这么认为的+_+),所以这样就简单了,只需把不同位数的基数表...
    99+
    2022-06-02
    Python integer 转化为罗马数
  • vue如何将字符串转化为整数
    这篇文章主要介绍“vue如何将字符串转化为整数”,在日常操作中,相信很多人在vue如何将字符串转化为整数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue如何将字符串转化为整数”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-06
  • C#中怎么将数字转换成中文
    这篇文章将为大家详细讲解有关C#中怎么将数字转换成中文,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#编写数字转换中文算法最近由于项目的原因,需要C#编写数字转换中文算法,先在网了找了一下...
    99+
    2023-06-17
  • Python如何将数字转化成列表
    小编给大家分享一下Python如何将数字转化成列表,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1. digitizedef digitize(n):  return list(ma...
    99+
    2023-06-25
  • c语言如何将数字转换成字符串
    今天小编给大家分享一下c语言如何将数字转换成字符串的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。c语言将数字转换成字符串的方...
    99+
    2023-07-04
  • C++怎么实现字符串转为整数
    今天小编给大家分享一下C++怎么实现字符串转为整数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。String to Inte...
    99+
    2023-06-19
  • C++实现LeetCode(8.字符串转为整数)
    [LeetCode] 8. String to Integer (atoi) 字符串转为整数 Implement atoi which converts...
    99+
    2022-11-12
  • C++实现将长整型数转换为字符串的示例代码
    C++实现将长整型数转换为字符串 #include <iostream> using namespace std; char *convertLongTo...
    99+
    2022-11-12
  • c语言字符串怎么转换成整数
    在C语言中,可以使用`atoi()`函数将字符串转换为整数。`atoi()`函数的声明如下:```int atoi(const ch...
    99+
    2023-09-21
    c语言
  • C#中怎么将字节数组转换成字符串
    C#中怎么将字节数组转换成字符串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#字节数组转换成字符串如果还想从 System.String 类中找到方法进行字符串和字节数组之...
    99+
    2023-06-17
  • C#中怎么将byte数组转化成图像
    C#中怎么将byte数组转化成图像,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。byte数组存放的是图像每个像素的灰度值,byte类型正好是从0~255,存放8bit灰度图像的...
    99+
    2023-06-17
  • php中怎么将字符串转化成字符数组
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑在php中,说到字符串转字符数组,就想到explode()函数。但explode()函数会将字符串按特定的分隔符分割成若干个部分,并不是将字符串一个个字符,传入数组;数...
    99+
    2019-05-18
    php 字符串 字符数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作