C # Преобразование больших арабских чисел в римские? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть программа.Я пишу программу, которая преобразует большие арабские цифры в римские (> = 4000) Из этого урока .Программа использует следующий код для преобразования целого числа в римские цифры.

// Map digits to letters.
private string[] ThouLetters = { "", "M", "MM", "MMM" };
private string[] HundLetters =
{ "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
private string[] TensLetters =
{ "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
private string[] OnesLetters =
{ "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
private string ArabicToRoman(int arabic) {
    // See if it's >= 4000.

    if (arabic >= 4000)
{
    // Use parentheses.
    int thou = arabic / 1000;
    arabic %= 1000;
    return "(" + ArabicToRoman(thou) + ")" +
        ArabicToRoman(arabic);
}
    // Otherwise process the letters.
string result = "";

// Pull out thousands.
int num;
num = arabic / 1000;
result += ThouLetters[num];
arabic %= 1000;

// Handle hundreds.
num = arabic / 100;
result += HundLetters[num];
arabic %= 100;

// Handle tens.
num = arabic / 10;
result += TensLetters[num];
arabic %= 10;

// Handle ones.
result += OnesLetters[arabic];

    return result;
 }

Эта программа в настоящее время работает.Однако, если арабские числа больше 3999, они записываются как (Если я введу 5000, он вернется) (v). .Мне нужно это следующим образом.Если я введу 5000, он должен вернуться к (5) M.Или в (5).Теперь я попытался, как тиш, но это не помогло ...

    // See if it's >= 4000.
if (arabic >= 4000)
{
    // Use parentheses.
    int thou = arabic / 1000;
    string s = thou.ToString();
    arabic %= 1000;
    return "(" + s + ")M" +
        ArabicToRoman(arabic);
}

А также я попытался другими способами.Но это не сработало ... Как я могу решить эту проблему?Спасибо.

1 Ответ

0 голосов
/ 19 декабря 2018

Ваш второй пример кода отлично работает для меня, но вам не нужен рекурсивный регистр для чисел, превышающих 3999, вы можете просто добавить оператор if в свой раздел тысяч:

// Pull out thousands.
var num = arabic / 1000;
if (num > 3) result += $"({num})M";
else result += ThouLetters[num];
arabic %= 1000;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...