У меня есть программа.Я пишу программу, которая преобразует большие арабские цифры в римские (> = 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);
}
А также я попытался другими способами.Но это не сработало ... Как я могу решить эту проблему?Спасибо.