【发布时间】:2013-07-17 23:02:01
【问题描述】:
我想弄清楚如何将罗马数字转换为整数。这是我的代码的一部分。当我提示用户输入 M 时,它显示 1000,但是当我提示用户输入一个罗马数字(如 VM)时,它没有给我 995 而是 1005。这是因为我告诉我的程序这样做。
我想弄清楚的是如何向前看并让它知道它何时添加或减去罗马数字。
我该如何开始做这件事?
class Roman
{
public int inprogress = 0;
public Roman(string roman)
{
char temp = 'Z';
int length;
length = roman.Length;
for (int i = 0; i < length; i++)
{
temp = roman[i];
if (temp == 'M')
{
inprogress = inprogress + 1000;
}
if (temp == 'D')
{
inprogress = inprogress + 500;
}
if (temp == 'C')
{
inprogress = inprogress + 100;
}
if (temp == 'L')
{
inprogress = inprogress + 50;
}
if (temp == 'X')
{
inprogress = inprogress + 10;
}
if (temp == 'V')
{
inprogress = inprogress + 5;
}
if (temp == 'I')
{
inprogress = inprogress + 1;
}
}
}
}
【问题讨论】:
-
您的主题是“将整数转换为罗马数字”,但您的代码显示的是“将罗马数字转换为整数”。你真正问的是哪一个? (他们是相反的。)请edit你的问题并澄清你在问什么。
-
一点建议:在编写这样的解决方案时,如果您弄清楚您将如何解决问题,然后编写该解决方案,将会更容易。拿出一张纸,试着想出一种方法来正确计算一些样本的罗马数字(只使用数字和其他东西,你不是在纸上写代码!)。然后,编写该解决方案的代码。
-
您能解释一下您所说的“向前看”是什么意思吗?我可能会帮助您?附言。你正在做不必要的 if 检查,要么使用 switch/case,要么将所有 if 语句,但第一个语句更改为 ''else if'。
-
罗马数字转整数就是我的意思。
-
顺便说一句,罗马人在公元 1 年左右没有使用像“IV”这样的减法原理,意思是 4。减法的使用要晚得多(大约 13 世纪)。在“罗马”时代,IV 和 VI 的含义相同: 6. 更多的是关于艺术而非地位。因此,不考虑这种减法原则的 OP 方法更“罗马”而不是欧洲。
标签: c# roman-numerals