C# 整数转罗马数字

2024-04-12 16:52

本文主要是介绍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();}

这篇关于C# 整数转罗马数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897708

相关文章

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使