C# 整数转罗马数字

罗马数字包含以下七种字符:I,V,X,L,C,D和M。

例如,罗马数字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。
给你一个整数,将其转为罗马数字。

C#处理逻辑如下

 private class Romanner{/// <summary>/// 数字/// </summary>public int Num { get; set; }/// <summary>/// 罗马数/// </summary>public string Roman { get; set; }}private List<Romanner> _romanners = new List<Romanner>(){new Romanner(){Num=1,Roman="I"},new Romanner(){Num=4,Roman="IV"},new Romanner(){Num=5,Roman="V"},new Romanner(){Num=9,Roman="IX"},new Romanner(){Num=10,Roman="X"},new Romanner(){Num=40,Roman="XL"},new Romanner(){Num=50,Roman="L"},new Romanner(){Num=90,Roman="XC"},new Romanner(){Num=100,Roman="C"},new Romanner(){Num=400,Roman="CD"},new Romanner(){Num=500,Roman="D"},new Romanner(){Num=900,Roman="CM"},new Romanner(){Num=1000,Roman="M"}};public string GetRotmanNumbers(int num)
{// 案例// 3 III// 4 IV// 7 VII// 9 IX   10 1// 58 LVIII 50 5 1 1 1// 299 CCIC// 499 ID// 1994 MCMXCIV 1000 100 1000 10 100 1 5// 2999 MMCMXCIX// 472  CDLXXIIStringBuilder sb = new StringBuilder();var maxRommaner = _romanners.OrderByDescending(t => t.Num).First();while (num > 0){//大于区间范围内的值if (num > maxRommaner.Num){sb.Append(maxRommaner.Roman);num = num - maxRommaner.Num;}// 在定义区间范围内的值else{for (int i = 0; i < _romanners.Count; i++){// 指定区间if (num == _romanners[i].Num){sb.Append(_romanners[i].Roman);num = num - _romanners[i].Num;break;}else if (num < _romanners[i].Num){var previousRomanner = _romanners[i - 1];num = num - previousRomanner.Num;sb.Append(previousRomanner.Roman);break;}}}}return sb.ToString();
}
参考写法readonly Tuple<int, string>[] valueSymbols = {new Tuple<int, string>(1000, "M"),new Tuple<int, string>(900, "CM"),new Tuple<int, string>(500, "D"),new Tuple<int, string>(400, "CD"),new Tuple<int, string>(100, "C"),new Tuple<int, string>(90, "XC"),new Tuple<int, string>(50, "L"),new Tuple<int, string>(40, "XL"),new Tuple<int, string>(10, "X"),new Tuple<int, string>(9, "IX"),new Tuple<int, string>(5, "V"),new Tuple<int, string>(4, "IV"),new Tuple<int, string>(1, "I")};public string IntToRoman(int num){StringBuilder roman = new StringBuilder();foreach (Tuple<int, string> tuple in valueSymbols){int value = tuple.Item1;string symbol = tuple.Item2;while (num >= value){num -= value;roman.Append(symbol);}if (num == 0){break;}}return roman.ToString();}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个不同长度元素排序找行和列的需求

1、需求&#xff1a;三种长度的元素&#xff0c;分别是4、8、12&#xff0c;每一行的长度是12&#xff0c;超过12就排到下一行&#xff0c;我们将这三种类型的多个元素打乱&#xff0c;然后找到这些元素对应的行和列。 如下图&#xff1a; 2、解决思路&#xff1a; 创建一个长…

Ubuntu 20.04.6下载

下载地址&#xff1a;https://cn.ubuntu.com/download 下载版本&#xff1a;ubuntu-20.04.6-desktop-amd64.iso

OpenHarmony实战开发-如何实现进入页面,点击动画卡片,动画播放并且文本发生变化。

介绍 Lottie是一个适用于OpenHarmony的动画库&#xff0c;它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画&#xff0c;并在移动设备上进行本地渲染&#xff0c; 可以在各种屏幕尺寸和分辨率上呈现&#xff0c;并且支持动画的交互性&#xff0c;通过…

C++stack,queue,priority_queue容器(个人笔记)

C栈队列优先级队列 1.熟悉stack接口以及使用1.1stack的接口1.2stack的模拟实现1.3stack的一些笔试题 2.熟悉queue接口以及使用2.1queue的接口2.2queue的模拟实现2.3queue的笔试题 3.熟悉priority_queue的接口以及使用&#xff08;底层堆&#xff09;3.1priority_queue的接口3.2…

spdlog C++日志管理 安装和下载

下载地址 https://github.com/gabime/spdlog?tabreadme-ov-file 使用git拉取代码 按照操作进行编译 点击spdlog.sln&#xff0c;用vs2019打开&#xff0c;进行编译debug x64 每项都编译一下&#xff0c;会生成安装包 安装包下载路径 https://download.csdn.net/download…

【AI学习中常见专业英文缩写词的解释】

前言&#xff1a; 为了看着不无聊&#xff0c;文中插入了一些AI生成的狗图片 AI(Artificail Intelligence)人工智能&#xff1a; 让机器模拟和展示人类智能的技术。 GAI(Generative Artificail Intelligence)生成式人工智能: 利用复杂的算法、模型和规则&#xff0c;从大规…

mysql数据库表的数据显示到前端tableView

首先我们在ui视图设计中引入TableView, 定义一个model QSqlQueryModel *modelnew QSqlQueryModel(ui->tableView);model->setQuery(query);//将查询结果绑定到模型上ui->tableView->setModel(model); 将tableView内容设置成model然后就可以出现数据库的数据。示…

2.8 构建gradle环境

构建gradle环境 目录一、安装Java Development Kit (JDK)二、下载Gradle三、解压Gradle四、配置环境变量五、验证安装六、gradle构建java项目七、eclipse配置gradle 目录 一、安装Java Development Kit (JDK) Gradle是基于Java开发的&#xff0c;所以首先需要安装JDK。你可以从…

春秋云境:CVE-2022-32991[漏洞复现]

从CVE官网查询该漏洞相关信息 该漏洞是由于welcome.php中的eid参数包含了SQL注入漏洞 则我们的目标就在于寻找welcome.php地址以及相关的可注入eid参数 开启靶机 先在页面正常注册、登录一个账号。密码随便填 进入了home目录&#xff0c;这里有三个话题可以选择开启 随便选…

【服务器部署篇】Linux下Nginx的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

【MySQL】20. 使用C语言链接

mysql connect mysql的基础&#xff0c;我们之前已经学过&#xff0c;后面我们只关心使用 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的库&#xff0c;大家可以去官网下载 我们使用C接口库来进行连接 要正确使用&#xff0c;我们需要做一些准备工作&#xff1a; …

从零构建生产级 AI 应用 ChatWithPDF

前言 目前 AIGC 的浪潮很火&#xff0c;不管你是什么方向的程序员&#xff0c;都可以通过大模型去构建自己的 App&#xff0c;但是搜索资料学习的时候发现&#xff1a; 目前构建 AI 应用的中文资源比较少&#xff0c;大多数都是英文的。教程大多是 demo 级别&#xff0c;没有…

claude3会员版怎么在国内充值

由于国内尚未正式开放注册&#xff0c;许多用户可能感到有些不便。但在这个时代&#xff0c;如果没有几个得心应手的AI工具链接&#xff0c;似乎都与时代脱节了。今天推荐一个非常实用的Claude3镜像站点&#xff1a; https://hiclaude3.cn 这个站点不仅拥有简洁明了的对话操作…

车联网大数据与人工智能一体化:开启智慧出行新时代

随着物联网技术的快速发展&#xff0c;车联网已经成为了汽车行业的重要趋势之一。而在车联网的发展过程中&#xff0c;大数据和人工智能的应用也日益成为关键因素。本文将探讨如何将大数据与人工智能一体化应用于车联网&#xff0c;以实现智慧出行的目标。 尤其是近来国内的华为…

JavaSE备忘录(未完)

文章目录 基本数据类型println 小知识除法( / ) 和 Infinity(无穷) 小知识除法InfinityInfinity 在除法中正负判断 求余(%) 小知识 基本数据类型 除 int、char 的包装类分别为 Integer、Character 外&#xff0c;其余基本数据类型的第一个字母大写就是它的包装类。 println 小…

spingboot3项目创建入门体验

spingboot3流程体验 项目简易打包部署 Spring Initializr 创建向导 spingboot3流程体验 先在IDEA创建一个新的空项目 然后在项目中创建一个模块 在pom.xml文件中添加maven配置继承spingboot3父项目和web开发场景启动器 创建启动springboot项目的主入口程序文件 import org.sp…

初识C++ · 类和对象(中)(1)

目录 1 类的6个默认成员函数 2 构造函数 3 析构函数 3 拷贝构造函数 1 类的6个默认成员函数 class Date { public:private:}; 这是一个空类&#xff0c;试问里面有什么&#xff1f; 可能你会觉得奇怪&#xff0c;明明是一个空类&#xff0c;却问里面有什么。其实一点也不…

数据融合概念解析:特征融合与特征交互

特征融合与特征交互的区别 我是目录 特征融合与特征交互的区别前言三者关系三者定义特性融合(Feature Fusion):特征拼接(Feature Concatenation):特征交互(Feature Interaction): 特征融合和特征交互关键的不同点数据处理目的应用 总结 前言 遥感系列第14篇。遥感图像处理方向…

js解密心得,记录一次抓包vue解密过程

背景 有个抓包结果被加密了 1、寻找入口&#xff0c;打断点 先正常请求一次&#xff0c;找到需要的请求接口。 寻找入口&#xff0c;需要重点关注几个关键字&#xff1a;new Promise 、new XMLHttpRequest、onreadystatechange、.interceptors.response.use、.interceptors.r…

c++的学习之路:25、map与set

摘要 本文中说一下map与set的使用 目录 摘要 一、关联式容器 二、键值对 三、map 1、map的介绍 2、map的使用 1、map的模板参数说明&#xff1a; 2、map的构造 3、map的迭代器 4、map的容量与元素访问 5、map中元素的修改 6、代码使用 ​编辑 三、总结 四、se…