整数转换为罗马数字 [英] Converting integers to roman numerals
本文介绍了整数转换为罗马数字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我试着写数字转换为罗马数字的功能。这是我到目前为止的代码;但是,它只能与小于400是否有一个快速简便的方法来做到这一点的转换,或使其处理所有的情况下延长我现有的代码数字作品?感谢您事先的任何帮助。
静态字符串convertroman(INT数)
{
INT L =数/ 10;
StringBuilder的SB =新的StringBuilder();
为(INT M = 0; M< = 1; M +)
{
如果(L == 0)
{
中断;
}
如果(L == 5)
{
某人= sb.Append(ro.L.ToString());
中断;
}
如果(L == 4)
{
SB = sb.Append(ro.X.ToString())。追加(ro.L.ToString()) ;
中断;
}
如果(L == 9)
{
SB = sb.Append(ro.X.ToString())。追加(ro.C.ToString()) ;
中断;
}
如果(L == 10)
{
某人= sb.Append(ro.C.ToString());
中断;
}
如果(L→5&放大器;&放大器; L&10 9)
{
某人= sb.Append(ro.L.ToString() );
λ= - 5;
M = 0;
//突破;
继续;
}
如果(L→10)
{
某人= sb.Append(ro.C.ToString());
λ= - 10;
M = 0;
//继续;
}
,否则
{
SB = sb.Append(ro.X.ToString());
}
}
INT Z =编号%10;
的for(int x = 0; X< = Z,X ++)
{
如果(Z == 0)
{
中断;
}
如果(Z == 5)
{
SB = sb.Append(ro.V.ToString());
中断;
}
如果(Z == 4)
{
SB = sb.Append(ro.I.ToString())。追加(ro.V.ToString()) ;
中断;
}
如果(Z == 9)
{
SB = sb.Append(ro.I.ToString())。追加(ro.X.ToString()) ;
中断;
}
如果(Z == 10)
{
SB = sb.Append(ro.X.ToString());
中断;
}
如果(Z→5&放大器;&放大器; z,其中; 9)
{
某人= sb.Append(ro.V.ToString());
Z =ž - 5;
X = 0;
}
,否则
{
sb.Append(ro.I.ToString());
}
}
返回sb.ToString();
}
解决方案
试试这个,简单和紧凑
公共静态字符串了toRoman(INT数)
{
如果((数字℃下)| |(数字> 3999))抛出新ArgumentOutOfRangeException(插入值betwheen 1和3999);
如果(数字< 1)返回的String.Empty;
如果(数字> = 1000)回归M+ toRoman中(数字 - 1000);
如果(数字> = 900)返回CMtoRoman的+(数字 - 900); //编辑:我输入400,而不是900
如果(数字> = 500)返回DtoRoman的+(数字 - 500);
如果(数字> = 400)返回CDtoRoman的+(数字 - 400);
如果(数字> = 100)返回的C+ toRoman中(数字 - 100);
如果(数字> = 90)返回XC+ toRoman中(数字 - 90);
如果(数字> = 50)返回LtoRoman的+(数字 - 50);
如果(数字> = 40)返回XLtoRoman的+(数字 - 40);
如果(数字> = 10)返回X+ toRoman中(数字 - 10);
如果(数字> = 9)返回IXtoRoman的+(数字 - 9);
如果(数字> = 5)返回V+ toRoman中(数字 - 5);
如果(数字> = 4)回归IVtoRoman的+(数字 - 4);
如果(数字> = 1)返回ItoRoman的+( - 1);
抛出新ArgumentOutOfRangeException(坏的东西发生了);
}
I'm trying to write a function that converts numbers to roman numerals. This is my code so far; however, it only works with numbers that are less than 400. Is there a quick and easy way to do this conversion, or extend my existing code so that it handles all cases? Thanks in advance for any help.
static string convertroman(int number)
{
int l = number / 10;
StringBuilder sb = new StringBuilder();
for (int m = 0; m <= l; m++)
{
if (l == 0)
{
break;
}
if (l == 5)
{
sb = sb.Append(ro.L.ToString());
break;
}
if (l == 4)
{
sb = sb.Append(ro.X.ToString()).Append(ro.L.ToString());
break;
}
if (l == 9)
{
sb = sb.Append(ro.X.ToString()).Append(ro.C.ToString());
break;
}
if (l == 10)
{
sb = sb.Append(ro.C.ToString());
break;
}
if (l > 5 && l < 9)
{
sb = sb.Append(ro.L.ToString());
l = l - 5;
m = 0;
// break;
continue;
}
if (l > 10)
{
sb = sb.Append(ro.C.ToString());
l = l - 10;
m = 0;
// continue;
}
else
{
sb = sb.Append(ro.X.ToString());
}
}
int z = number % 10;
for (int x = 0; x <= z; x++)
{
if (z == 0)
{
break;
}
if (z == 5)
{
sb = sb.Append(ro.V.ToString());
break;
}
if (z == 4)
{
sb = sb.Append(ro.I.ToString()).Append(ro.V.ToString());
break;
}
if (z == 9)
{
sb = sb.Append(ro.I.ToString()).Append(ro.X.ToString());
break;
}
if (z == 10)
{
sb = sb.Append(ro.X.ToString());
break;
}
if (z > 5 && z < 9)
{
sb = sb.Append(ro.V.ToString());
z = z - 5;
x = 0;
}
else
{
sb.Append(ro.I.ToString());
}
}
return sb.ToString();
}
解决方案
try this, simple and compact
public static string ToRoman(int number)
{
if ((number < 0) || (number > 3999)) throw new ArgumentOutOfRangeException("insert value betwheen 1 and 3999");
if (number < 1) return string.Empty;
if (number >= 1000) return "M" + ToRoman(number - 1000);
if (number >= 900) return "CM" + ToRoman(number - 900); //EDIT: i've typed 400 instead 900
if (number >= 500) return "D" + ToRoman(number - 500);
if (number >= 400) return "CD" + ToRoman(number - 400);
if (number >= 100) return "C" + ToRoman(number - 100);
if (number >= 90) return "XC" + ToRoman(number - 90);
if (number >= 50) return "L" + ToRoman(number - 50);
if (number >= 40) return "XL" + ToRoman(number - 40);
if (number >= 10) return "X" + ToRoman(number - 10);
if (number >= 9) return "IX" + ToRoman(number - 9);
if (number >= 5) return "V" + ToRoman(number - 5);
if (number >= 4) return "IV" + ToRoman(number - 4);
if (number >= 1) return "I" + ToRoman(number - 1);
throw new ArgumentOutOfRangeException("something bad happened");
}
这篇关于整数转换为罗马数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文