c++ - 使用罗马数字编写程序并将其设置为 int

标签 c++ loops input

Possible Duplicate:
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)*/

最佳答案

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

所以求和部分应该修改。

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

如果作业必须用 C++ 编写,那么现在就是创建 RomanNumeral 类的时候了:)

关于c++ - 使用罗马数字编写程序并将其设置为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9949936/

相关文章:

c++ - 使用 Visual Studio 2005(VC8) 时出现链接错误

c++ - 异常情况下关闭线程

c++ - 我如何在 C++ 中找到哪个子类正在调用父类的函数?

loops - 为什么Lua没有 "continue"语句?

jquery - 带有 jQ​​uery 数据属性的每个循环都无法正常工作

c# - 使用 foreach 循环查找作为其他对象的子对象的游戏对象 (Unity3d)

Python属性错误: module 'runAnalytics' has no attribute 'run'

java - 使用扫描仪选择以前的用户输入

c++ - 在 C++03 中调度二进制和一元可调用对象

css - 我页面上 Angular 的按钮?