这是一个家庭作业问题。我知道一些罗马数字是不正确的。只要值正确,我的老师就不在乎如何正确写入数字。
我对这个程序有一些问题。除了要求用户按“E”之外,我不知道任何其他方式退出while循环。
一旦我这样做,输出变化为cout << "The first number is " << RomanNum1 << endl;
是E而不是V或VI或其他。
我应该使用函数,我不担心这些。程序的底部是我的老师想要输出的样子。任何帮助将不胜感激。
//This programs reads in Roman numerals and outputs the correct numerical value.
//This program will do simple math using Roman numerals and output a numerical value
#include <iostream>
using namespace std;
const char One = 'I';
const char Five = 'V';
const char Ten = 'X';
const char Fifty = 'L';
const char OneHundred = 'C';
const char FiveHundred = 'D';
const char OneThousand = 'M';
const char EXIT = 'E';
const char Plus = '+';
const char Minus = '-';
const char Times = '*';
const char Divide = '/';
const int ValueOfOne = 1;
const int ValueOfFive = 5;
const int ValueOfTen = 10;
const int ValueOfFifty = 50;
const int ValueOfOneHundred = 100;
const int ValueOfFiveHundred = 500;
const int ValueOfOneThousand = 1000;
int main (){
char RomanNum1, RomanNum2;
char Operation;
int Answer;
string Response;
int ICount = 0;
int VCount = 0;
int XCount = 0;
int LCount = 0;
int CCount = 0;
int DCount = 0;
int MCount = 0;
int Sum = 0;
cin >> RomanNum1;
while (RomanNum1 != EXIT){
if (RomanNum1 == One){
ICount++;
}
else if (RomanNum1 == Five){
VCount++;
}
else if (RomanNum1 == Ten){
XCount++;
}
else if (RomanNum1 == Fifty){
LCount++;
}
else if (RomanNum1 == OneHundred){
CCount++;
}
else if (RomanNum1 == FiveHundred){
DCount++;
}
else if (RomanNum1 == OneThousand){
MCount++;
}
else {
RomanNum1 = EXIT;
}
cin >> RomanNum1;
}
cin >> RomanNum2;
while (RomanNum2 != EXIT){
if (RomanNum2 == One){
ICount++;
}
else if (RomanNum2 == Five){
VCount++;
}
else if (RomanNum2 == Ten){
XCount++;
}
else if (RomanNum2 == Fifty){
LCount++;
}
else if (RomanNum2 == OneHundred){
CCount++;
}
else if (RomanNum2 == FiveHundred){
DCount++;
}
else if (RomanNum2 == OneThousand){
MCount++;
}
else {
RomanNum2 = EXIT;
}
cin >> RomanNum2;
}
cin >> Operation;
if (Operation == Plus){
Answer = RomanNum1 + RomanNum2;
Response = "sum";
}
else if (Operation == Minus){
Answer = RomanNum1 - RomanNum2;
Response = "difference";
}
else if (Operation == Times){
Answer = RomanNum1 * RomanNum2;
Response = "product";
}
else {
Answer = RomanNum1 / RomanNum2;
Response = "quotient";
}
Sum = ValueOfOne * ICount + ValueOfFive * VCount + ValueOfTen * XCount
+ ValueOfFifty * LCount + ValueOfOneHundred * CCount + ValueOfFiveHundred
* DCount + ValueOfOneThousand * MCount;
cout << "The first number is " << RomanNum1 << endl;
cout << "The second number is " << RomanNum2 << endl;
cout << "Arithmetic operation is " << Operation << endl;
cout << "The " << Response << " of " << RomanNum1 << " and " << RomanNum2 << " is " << Sum << endl;
return 0;
}
/* here is what the output should be
Input for Run 1:
MCCXXVI
LXVIIII
+
DCX
MCI
-
LXVI
CCLXI
/
MD
XXX
/
LXVIIII
XXVIIII
*
The output for Test Run 1:
MCCXXVI
The first number is 1226
LXVIIII
The second number is 69
+
Arithmetic operation is +
The sum of 1226 and 69 is MCCLXXXXV (1295)
DCX
The first number is 610
MCI
The second number is 1101
-
Arithmetic operation is -
The difference of 610 and 1101 is -CCCCLXXXXI (-491)*/
答案 0 :(得分:2)
关于罗马数字的一个提示。如果较小的值位于较大的值之前,则较小的值将从较大的值中减去,并将结果添加到总计中。例如IV = 4。 有关更多详细信息,请查看相关的维基百科页面: http://en.wikipedia.org/wiki/Roman_numerals
所以应该修改求和部分。
一般来说,每当您在代码中看到重复时,请不要犹豫将其提取到方法中。
如果家庭作业必须是c ++,那么现在是时候创建一个RomanNumeral类了:)