用罗马数字做一个程序并使它们成为int

时间:2012-03-30 20:22:20

标签: c++ loops input

  

可能重复:
  My output is outputting correctly

这是一个家庭作业问题。我知道一些罗马数字是不正确的。只要值正确,我的老师就不在乎如何正确写入数字。

我对这个程序有一些问题。除了要求用户按“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)*/

1 个答案:

答案 0 :(得分:2)

关于罗马数字的一个提示。如果较小的值位于较大的值之前,则较小的值将从较大的值中减去,并将结果添加到总计中。例如IV = 4。 有关更多详细信息,请查看相关的维基百科页面: http://en.wikipedia.org/wiki/Roman_numerals

所以应该修改求和部分。

一般来说,每当您在代码中看到重复时,请不要犹豫将其提取到方法中。

如果家庭作业必须是c ++,那么现在是时候创建一个RomanNumeral类了:)