1. 问题描述

这里直接采用的是leetcode上面的问题描述

罗马数字包含以下七种字符: IVXLCDM

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
  • C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。

给你一个整数,将其转为罗马数字。

解决思路

首先想到的便是怎么将各个数字区分开来,我这里使用pair来存储整数与罗马数字对对应的数值,这里需要注意,我们需要选择哪些数字要进入pair。

这里的pair里面不仅要包含常规的七种罗马数字还应该包含有以下一些特殊的罗马数字:

  • IV = 4
  • IX = 9
  • XL = 40
  • XC = 90
  • CD = 400
  • CM = 900

将这些特殊的罗马数字也要存放进pair 中

接下来编写pair

const pair<int, string> digitalMatching[] = {{1000, "M"},{900, "CM"},{500, "D"},{400, "CD"},{100, "C"},{90, "XC"},{50, "L"},{40, "XL"},{10, "X"},{9, "IX"},{5, "V"},{4, "IV"},{1, "I"},
};

然后利用范围for循环依次从digitalMatching中查找当传入的num大于等于数字时便将对应的罗马数字存入字符串中。(注意这里需要while判断)

使用while时因为如果出现传入3那么需要将I存入字符串中3次。

代码如下:

string intToRoman(int num) {string romanNumbers;for (const pair<int, string> i : digitalMatching) {while (num >= i.first) {num -= i.first;romanNumbers += i.second;}if (num == 0) {break;}}return romanNumbers;
}

12.整数转罗马数字-LeetCode相关推荐

  1. LeetCode (12.整数转罗马数字)JAVA StringBuffer

    LeetCode (12.整数转罗马数字)JAVA StringBuffer 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 1 ...

  2. Leetcode算法Java全解答--12. 整数转罗马数字

    Leetcode算法Java全解答–12. 整数转罗马数字 文章目录 Leetcode算法Java全解答--12. 整数转罗马数字 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用例 其他 ...

  3. 12. 整数转罗马数字 (Java解题 贪心思想)

    LeetCode - 12. 整数转罗马数字 题目描述 解题分析 code 总结 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L ...

  4. LeetCode 11盛水最多的容器12整数转罗马数字

    目录 盛水最多的容器 题目描述 分析 整数转罗马数字 题目描述: 分析 结语 盛水最多的容器 公众号:bigsai,回复进群加入打卡,回复bigsai获取3GB的pdf资源.点赞再看,养成习惯! 题目 ...

  5. Leetcode No.12 整数转罗马数字

    题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X             ...

  6. LeetCode【11--盛水最多的容器】LeetCode【12 -- 整数转罗马数字】

    盛水最多的容器 题目描述 给定 n 个非负整数 a1,a2,-,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0 ...

  7. LeetCode(cai鸟之路)12 整数转罗马数字

    题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II , ...

  8. Leetcode 12. 整数转罗马数字 (每日一题 20210827)

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M.字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列 ...

  9. leetcode力扣12. 整数转罗马数字

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符          数值 I             1 V             5 X             10 L ...

最新文章

  1. Spring AOP与IOC
  2. ESX上ORACLE 10.2RAC(4.在REHAT4.7中安装ORACLE RAC)
  3. 【Android RTMP】x264 图像数据编码 ( Camera 图像数据采集 | NV21 图像数据传到 Native 处理 | JNI 传输字节数组 | 局部引用变量处理 | 线程互斥 )
  4. ASP.NET MVC 实现多文件上传
  5. CPU Burst有副作用吗?让数学来回答!| 龙蜥技术
  6. python源文件改写编写一个程序读取一个python源程序文件_学PYTHON第三节:编译和解释...
  7. 苹果手机录屏软件_手机端录屏软件哪个好 手机上最好的录屏软件
  8. bondprice+matlab,债券久期与凸度的Matlab实现
  9. 淘宝店铺上传成人用品类宝贝的错误解决
  10. 小学计算机教师业务笔记,2016-2017学年度小学教师业务学习笔记
  11. QoS(服务质量)指标
  12. 【 OJ 】 HDOJ1048 明文加密问题 [ 42 ]
  13. 浅谈共线性的产生以及解决方法(中篇——今生)
  14. 【AcWing 165】 小猫爬山 简单dfs + 剪枝优化
  15. windows下开启文件共享的访问日志
  16. 一个风靡全球的游戏(需要大家来参加)!!!
  17. 如何通俗易懂地理解自动驾驶?
  18. springboot2.x项目中正确使用logback-spring.xml的方式
  19. 【C/C++】C语言特性总结
  20. 微信小程序成长记录(一)

热门文章

  1. 滴滴上线自动驾驶服务;微软宣布将永久关闭实体店;.NET 5.0 Preview 6 发布 | 极客头条...
  2. AI 又进阶!除了鉴别 PS 图片,还能一键卸妆!
  3. FPGA 无解漏洞 “StarBleed”轰动一时,今天来扒一下技术细节!
  4. 软件工程师如何应对面试的可怕“反乌托邦世界”?
  5. 看过无数 Java GC 文章,这 5 个问题你也未必知道!
  6. 一文快速探索视频用户网络画像与应用
  7. 程序员1w2以下的,2020年就要面对现实了...
  8. 如何通过 Web 实现防御木马、病毒...... | 原力计划
  9. 中国有什么拿得出手的开源软件产品?|原力计划
  10. 硬核科普!携号转网的技术原理分析!