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

相关文章

2. c#从不同cs的文件调用函数

1.文件目录如下: 2. Program.cs文件的主函数如下 using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using System.Windows.Forms;namespace datasAnalysis{internal static

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

PTA求一批整数中出现最多的个位数字

作者 徐镜春 单位 浙江大学 给定一批整数,分析每个整数的每一位数字,求出现次数最多的个位数字。例如给定3个整数1234、2345、3456,其中出现最多次数的数字是3和4,均出现了3次。 输入格式: 输入在第1行中给出正整数N(≤1000),在第二行中给出N个不超过整型范围的非负整数,数字间以空格分隔。 输出格式: 在一行中按格式“M: n1 n2 ...”输出,其中M是最大次数,n

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

C# dateTimePicker 显示年月日,时分秒

dateTimePicker默认只显示日期,如果需要显示年月日,时分秒,只需要以下两步: 1.dateTimePicker1.Format = DateTimePickerFormat.Time 2.dateTimePicker1.CustomFormat = yyyy-MM-dd HH:mm:ss Tips:  a. dateTimePicker1.ShowUpDown = t

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

C# Hash算法之MD5、SHA

MD5我们用的还是比较多的,一般用来加密存储密码。但是现在很多人觉MD5可能不太安全了,所以都用上了SHA256等来做加密(虽然我觉得都差不多,MD5还是能玩)。 还是跟上一篇说的一样,当一个算法的复杂度提高的同时肯定会带来效率的降低,所以SHA和MD5比较起来的话,SHA更安全,MD5更高效。 由于HASH算法的不可逆性,所以我认为MD5和SHA主要还是应用在字符串的"加密"上。 由于