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;通过…

vue3 复制文本

vue-clipboard3 是一个为 Vue.js 框架设计的剪贴板操作库&#xff0c;它基于 Vue 3 Composition API。它提供了简单易用的方式来实现在 Vue.js 应用中复制文本到剪贴板的功能&#xff0c;而不需要手动处理浏览器的剪贴板 API。 主要特性&#xff1a; 简单易用&#xff1a; vue…

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…

2024年4月18号PMP每日三题含答案

2024年4月18号PMP每日三题含答案 1.一家公司启动一个项目&#xff0c;旨在下一季度结束前提高客户满意度。项目经理应该如何确定最佳实践&#xff1f; A.使用标杆对照 B.组织焦点小组会议 C.安排一次引导式研讨会 D.创建一份亲和图 1.解析&#xff1a;A是参考答案。标杆对照是…

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;从大规…

类与对象笔记-Java-第一部分

类 基本格式 class 类名{ 类体 } 类的声明 class People{ } class 植物{ } 类体 class Ladder{float above;float bottom;float height;float area;float computer(){area(abovebottom)*height/2.0f;return area;}void setHeight(float h){heighth;} } 成员变量 成…

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

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

c++ 拷贝构造函数 简单实验

1.概要 什么时候调用拷贝构造&#xff0c;就是有对象创建的时候&#xff0c;就会调用拷贝构造&#xff0c;无论对象是构造&#xff08;类&#xff08;来源&#xff09;&#xff09;还是赋值&#xff08;对象&#xff09;都会调用拷贝构造。 赋值函数调用的时机是两个对象都已经…

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;产…

使用 draw.io(现在称为 diagrams.net)进行图表设计和绘图

使用 draw.io&#xff08;现在称为 diagrams.net&#xff09;进行图表设计和绘图的体验通常是积极和高效的。以下是一些用户的使用心得&#xff0c;根据您提供的搜索结果进行总结&#xff1a; 界面简洁直观&#xff1a;draw.io 的用户界面设计简洁&#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;方便之后进行复习 # 1.1 select ID, name,sec_id from instructor natural left outer join teaches&#xff1b;# 1.2 select ID,name, count(sec_id) as Numberofsetions fro…

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

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