(leetcode学习)12. 整数转罗马数字

七个不同的符号代表罗马数字,其值如下:

符号
I1
V5
X10
L50
C100
D500
M1000

罗马数字是通过添加从最高到最低的小数位值的转换而形成的。将小数位值转换为罗马数字有以下规则:

  • 如果该值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号附加到结果,减去其值,然后将其余部分转换为罗马数字。
  • 如果该值以 4 或 9 开头,使用 减法形式,表示从以下符号中减去一个符号,例如 4 是 5 (V) 减 1 (I): IV ,9 是 10 (X) 减 1 (I):IX。仅使用以下减法形式:4 (IV),9 (IX),40 (XL),90 (XC),400 (CD) 和 900 (CM)。
  • 只有 10 的次方(I, X, C, M)最多可以连续附加 3 次以代表 10 的倍数。你不能多次附加 5 (V),50 (L) 或 500 (D)。如果需要将符号附加4次,请使用 减法形式

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

示例 1:

输入:num = 3749

输出: "MMMDCCXLIX"

解释:

3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)
 700 = DCC 由于 500 (D) + 100 (C) + 100 (C)
  40 = XL 由于 50 (L) 减 10 (X)
   9 = IX 由于 10 (X) 减 1 (I)
注意:49 不是 50 (L) 减 1 (I) 因为转换是基于小数位

示例 2:

输入:num = 58

输出:"LVIII"

解释:

50 = L
 8 = VIII

示例 3:

输入:num = 1994

输出:"MCMXCIV"

解释:

1000 = M
 900 = CM
  90 = XC
   4 = IV

提示:

  • 1 <= num <= 3999

 注意到每个位数上的数字,处理方法是一样的,就写了一个函数。速度和内存占用中规中矩,打败一半的人。好在自我感觉代码写的比较清晰

void express(int num, char c_1, char c_5, char c_10, char* res, int& idx) {
	if (num == 4) {
		res[idx++] = c_1;
		res[idx++] = c_5;
	}
	else if (num == 9) {
		res[idx++] = c_1;
		res[idx++] = c_10;
	}
	else if (num < 5) {
		for (int i = 0; i < num; i++) {
			res[idx++] = c_1;
		}
	}
	else if (num >= 5) {
		res[idx++] = c_5;
		for (int i = 0; i < num - 5; i++) {
			res[idx++] = c_1;
		}
	}
}


string intToRoman(int num) {
	char res_c[50];
	int idx = 0;
	express(num / 1000, 'M', '!', '!', res_c, idx);
	num %= 1000;
	express(num / 100, 'C', 'D', 'M', res_c, idx);
	num %= 100;
	express(num / 10, 'X', 'L', 'C', res_c, idx);
	num %= 10;
	express(num , 'I', 'V', 'X', res_c, idx);
	res_c[idx] = '\0';
	string res_str(res_c);
	return res_str;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/800517.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI算法17-贝叶斯岭回归算法Bayesian Ridge Regression | BRR

贝叶斯岭回归算法简介 贝叶斯岭回归&#xff08;Bayesian Ridge Regression&#xff09;是一种回归分析方法&#xff0c;它结合了岭回归&#xff08;Ridge Regression&#xff09;的正则化特性和贝叶斯统计的推断能力。这种方法在处理具有大量特征的数据集时特别有用&#xff…

STM32第九课:STM32-基于标准库的42步进电机的简单I/O控制(附电机教程,看到即赚到)

一&#xff1a;步进电机简介 步进电机又称为脉冲电机&#xff0c;简而言之&#xff0c;就是一步一步前进的电机。基于最基本的电磁铁原理,它是一种可以自由回转的电磁铁,其动作原理是依靠气隙磁导的变化来产生电磁转矩&#xff0c;步进电机的角位移量与输入的脉冲个数严格成正比…

4000厂商默认账号密码、默认登录凭证汇总.pdf

获取方式&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1F8ho42HTQhebKURWWVW1BQ?pwdy2u5 提取码&#xff1a;y2u5

Linux编程乐趣《简单、有趣、好玩的Linux命令》

文章目录 一、黑客帝国&#xff08;cmatrix&#xff09;1.1 centOS 手动安装&#xff1a;1.2 . 运行1.3 . 效果 二、cal命令三、htop四、sl:蒸汽火车五、cowsay:会说话的小牛六、boxes七、pv 一、黑客帝国&#xff08;cmatrix&#xff09; 1.1 centOS 手动安装&#xff1a; #…

2024.7.12单片机PWM

遇到了一个光标变成下划线的问题&#xff1a; Keil5光标变下划线&#xff0c;变回来的方法_keil5光标是下划线-CSDN博客 这里是用了输入捕获&#xff08;IC&#xff1a;input capture&#xff09;&#xff0c;输出比较&#xff08;OC:Output Compare&#xff09;区别 学到这…

加速访问:优秀的Python、Java、Javascript和Linux镜像站点推荐

前言 当访问位于国外的官方网站时&#xff0c;常常会面临到网速缓慢或者无法访问的问题&#xff0c;这不仅令人沮丧&#xff0c;也影响了工作效率。为了解决这些问题&#xff0c;我开始寻找并使用一些镜像站点&#xff0c;特别是在Python、Java、Javascript和Linux等领域。 这…

3DMAX造山地形插件Mountain使用方法详解

3DMAX造山地形插件Mountain使用教程 3DMAX造山地形插件Mountain&#xff0c;用于在3dMax中轻松快速地创建逼真的山脉地形。它具有交互性、快速性和易用性&#xff0c;初学者只需点击一下即可&#xff0c;高级用户可以使用各种丰富的参数。Mountain创建简单的3dMax几何体&#x…

C++ //练习 15.17 尝试定义一个Disc_quote的对象,看看编译器给出的错误信息是什么?

C Primer&#xff08;第5版&#xff09; 练习 15.17 练习 15.17 尝试定义一个Disc_quote的对象&#xff0c;看看编译器给出的错误信息是什么&#xff1f; 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /********************…

Python机器学习、深度学习技术提升气象、海洋、水文领域实践技术

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;能够在不同操作系统和平台使用&#xff0c;简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库&#xff0c;还有丰富的第三方库&#xff0c;Python在数据处理、科学计算、数学建模、数据挖…

STM32+TMC2209控制步进电机正反转。

STM32F103ZET6TMC2209控制步进电机正反转 1. 步进电机介绍2 驱动器TMC2209介绍2.1 引脚图及其功能2.2 细分介绍2.3 TMC控制驱动器接法 3 控制器介绍3.1 确定控制引脚3.2 UBEMX配置3.2.1 GPIO配置3.2.2 NVIC配置3.2.3 RCC配置3.2.4 SYS配置3.2.5 USRAT2配置&#xff08;PS:没用上…

《Programming from the Ground Up》阅读笔记:p49-p74

《Programming from the Ground Up》学习第3天&#xff0c;p49-p74总结&#xff0c;总计26页。 一、技术总结 1.function (1)定义 p49, Functions are unit of code that do a defined piece of work on specified types of data。 函数是在指定类型的数据上完成所定义的某…

实验二:图像灰度修正

目录 一、实验目的 二、实验原理 三、实验内容 四、源程序和结果 源程序(python): 结果: 五、结果分析 一、实验目的 掌握常用的图像灰度级修正方法,包括图象的线性和非线性灰度点运算和直方图均衡化法,加深对灰度直方图的理解。掌握对比度增强、直方图增强的原理,…

数据库启动报ORA-600 6711故障分析处理---惜分飞

几个月以前的一个数据库故障,今天拿出来在win上重新分析,数据库启动报ORA-600 6711错 C:\Users\XFF>SQLPLUS / AS SYSDBA SQL*Plus: Release 12.1.0.2.0 Production on 星期日 7月 14 16:17:32 2024 Copyright (c) 1982, 2014, Oracle. All rights reserved. 已连接到空…

发那科机床切换程序号

此需求一般出现在要通过发那科机床做自动化单元的情况。通过发那科SDK给发那科寄存器指令&#xff0c;进而实现&#xff0c;机床自动程序号切换。 一、更改3006参数&#xff1a;开启工件号检索功能 二、更改G24的值&#xff08;0-9999&#xff09; G24为需要切换的程序号。 三、…

UML顺序图的建模技术及应用示例

新书速览|《UML 2.5基础、建模与设计实践》 顺序图是强调消息时间顺序的交互图&#xff0c;它描述了对象之间传送消息的时间顺序&#xff0c;用于表示用例中的行为顺序。顺序图将交互关系表示为一个二维图&#xff0c;横轴代表在协作中各独立对象的类元角色&#xff1b;纵轴是…

怎样在 PostgreSQL 中优化对大表的并发读取操作?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中优化对大表的并发读取操作&#xff1f;一、了解 PostgreSQL 中的大表和并发读取&…

Linux C语言基础 day10

目录 学习目标&#xff1a; 学习内容&#xff1a; 1.指针指向数组 1.1 指针与数组的关系 1.2 指针与一维数组关系实现 1.2.1 指针与一维数组的关系 1.2.2 指针指向一维整型数组作为函数参数传递 课外作业&#xff1a; 学习目标&#xff1a; 一周掌握 C基础知识 学习内…

mysql-connector-java 8.0.33 反序列化漏洞

前言 经过与oracle官方沟通&#xff0c;在最新的mysql-connector-j 9.0.0里不存在这个问题&#xff0c;所以他们不认为这是个漏洞 不过确实&#xff0c;mysql-connector-java这个分支已经迁移到mysql-connector-j了&#xff0c;当时没注意&#xff0c;交的时候只注意了mysql-c…

C#知识|账号管理系统:添加账号的功能笔记

哈喽,你好啊,我是雷工! 本节记录账号管理系统中添加账号的逻辑过程,以下为学习笔记。 01 实现内容 ①:实现当点击【保存到数据库】按钮时,将账号名称、原创篇数、账号简介、账号类型显示的内容存储到LGAccountManagerDB数据库的Account表中; ②:实现点击【保存到数据库…