整数转换为罗马数字 [英] Converting integers to roman numerals

查看:99
本文介绍了整数转换为罗马数字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试着写数字转换为罗马数字的功能。这是我到目前为止的代码;但是,它只能与小于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆