public void homework2()
{
Dictionary<int, string> number = new Dictionary<int, string>
{
{1,"I" },
{4,"IV"},
{5,"V" },
{9,"IX"},
{10,"X" },
{40,"XL"},
{50,"L" },
{90,"XC"},
{100,"C" },
{400,"CD"},
{500,"D" },
{900,"CM"},
{1000,"M" }
};
var num = number.OrderByDescending(e => e.Key).ToList();
Console.WriteLine("开始罗马转数字请按“a“ ");
Console.WriteLine("开始数字转罗马请按“b” ");
string b = Console.ReadLine();
while(b == "a")
{
while (b != "q")
{
Console.WriteLine("请输入要转换成罗马数字的阿拉伯数字");
string a = Console.ReadLine();
int inta = int.Parse(a);
var output = new StringBuilder();
for (int i = 0; i < num.Count && inta > 0; i++)
{
if (inta < num[i].Key) continue;
while (inta >= num[i].Key)
{
inta -= num[i].Key;
output.Append(num[i].Value);
}
}
Console.WriteLine(output.ToString());
Console.WriteLine("继续请按任意键,退出则按“q”");
b = Console.ReadLine();
}
}
while(b == "b")
{
while(b != "q")
{
Console.WriteLine("请输入要转换成阿拉伯数字的罗马数字");
string stra = Console.ReadLine();
var intnumber = 0;
var length = stra.Length;
var digits = new Dictionary<string, int>()
{
{"I",1},
{"V",5},
{"X",10},
{"L",50},
{"C",100},
{"D",500},
{"M",1000}
};
for (int i = 0; i < length - 1; i++)
{
//前面 n-1 位数字通过左右比较决定正负 & 第 n 位数字必然为正
if ((digits[stra[i].ToString()] >= digits[stra[i + 1].ToString()]) || i + 1 >= length)
{
intnumber += digits[stra[i].ToString()];
}
else
{
intnumber -= digits[stra[i].ToString()];
}
}
intnumber += digits[stra[length-1].ToString()];
Console.WriteLine(intnumber);
Console.WriteLine("继续请按任意键,退出则按“q”");
b = Console.ReadLine();
}
}
}
罗马数字与阿拉伯数字的相互转换
最新推荐文章于 2024-07-30 21:00:22 发布