当前位置: 首页 > news >正文

罗马数字转整数 C++

罗马数字包含以下七种字符: I, V, X, LCD 和 M

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 罗马数字 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。

给定一个罗马数字,将其转换成整数。

示例:

输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

class Solution {
public:int romanToInt(string s) {int sum = 0;int n = 0;int lastn = 0;// 从右往左反向遍历for (int i=s.size()-1; i>=0; i--) {if (s[i] == 'I') n = 1;else if (s[i] == 'V') n = 5;else if (s[i] == 'X') n = 10;else if (s[i] == 'L') n = 50;else if (s[i] == 'C') n = 100;else if (s[i] == 'D') n = 500;else if (s[i] == 'M') n = 1000;// 不是首个, 且数字比右边的小, 则属于特殊规则, 做减法, 其余情况做加法if (sum != 0 && n < lastn) {n = -n;}lastn = n;sum += n;}return sum;}
};

http://www.lryc.cn/news/417447.html

相关文章:

  • Day20_2--介绍同步加载和异步加载
  • sftp做成一个池子
  • 全网最全-Netty从入门到精通
  • C#知识|文件与目录操作:对象的创建、保存、读取
  • 自定义 SwiftUI 中符号图像的外观
  • 循环神经网络和自然语言处理一
  • CSS技巧专栏:一日一例 20-纯CSS实现点击会凹陷的按钮
  • 20240807 每日AI必读资讯
  • 海外社媒账号如何让防关联?账号隔离的5大要点
  • 下一代 AI 搜索引擎 MindSearch:多智能体 + 系统2,模拟人类认知过程的 AI 搜索引擎
  • 一键生成专业PPT:2024年AI技术在PPT软件中的应用
  • Godot学习笔记8——PONG游戏制作
  • 软件RAID配置实战(2个案例场景)
  • # 基于MongoDB实现商品管理系统(2)
  • 国标GB28181视频平台LntonCVS视频融合共享平台视频汇聚应用方案
  • java基础I/O
  • 关于“八股文”在程序员面试中的角色及其对工作实际效用的讨论
  • 【算法设计题】基于front、rear和count的循环队列初始化、入队和出队操作,第6题(C/C++)
  • 端点区间影响
  • Leetcode3224. 使差值相等的最少数组改动次数
  • thinkphp之命令执行漏洞复现
  • 算法板子:匈牙利算法——二分图的最大匹配
  • 轻松拯救数据危机!四大必备的数据恢复软件免费版推荐!
  • windbg常用命令
  • Ubuntu(20.04 LTS)更换镜像源
  • golang使用 copier对象复制时进行类型转化
  • 英特尔18A制程技术分析解读
  • 【百度面试算法题】2024-08-02
  • OSPF基础
  • leetcode 958.二叉树的完全性检验