首页 > 解决方案 > 罗马到数字的最后一个for循环问题

问题描述

有人可以帮我找出我的代码有什么问题吗?

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

int main(){
    ifstream roman("C:/OT2015/Rimski.txt");
    ofstream arabic("C:/OT2015/Arapski.txt");
    string line;

    int sum = 0;
    int count = 0;

    getline( roman,line);
    int numbers[line.length()] = {0};
    for(int i = 0; i < line.length(); i++){
        if(line[i] == 'I'){
            numbers[i] = 1;
        }
        if(line[i] == 'V'){
            numbers[i] = 5;
        }        
        if(line[i] == 'X'){
            numbers[i] = 10;
        }
        if(line[i] == 'L'){
            numbers[i] = 50;
        }
        if(line[i] == 'C'){
            numbers[i] = 100;
        }
        if(line[i] == 'D'){
            numbers[i] = 500;
        }
        if(line[i] == 'M'){
            numbers[i] = 1000;
        }
        count++;
    }
    for(int i = 0; i < count; i++){
        if(numbers[i] >= numbers[i+1]){
            sum = sum + numbers[i];
        }
        else{
            sum = sum - numbers[i];
        }
    }

    cout << sum;
    arabic << sum;
}

问题在于最后一个 for 循环,它错误地将数字相加。当我使用调试器时,它会变得混乱并将我的断点错放在其他地方。它还会跳过第一个条件 if 并直接跳转到 else 并加起来为 -10。我修复了它,但它仍然输出数字 -10。

我测试的罗马数字:LXXIV 正确的输出:74 我的输出(不正确):-10

请帮忙

标签: c++

解决方案


好吧,当我添加乔治的评论时,我添加了另一个 if 循环并且它起作用了

#include <iostream>
#include <string>

using namespace std;

int main(){
    ifstream  roman("C:/OT2015/Rimski.txt");
    ofstream arabic("C:/OT2015/Arapski.txt");
    string line;

    int sum = 0;
    int count = 0;

    getline( roman,line);
    int numbers[line.length()] = {0};
    for(int i = 0; i < line.length(); i++){
        if(line[i] == 'I'){
            numbers[i] = 1;
        }
        if(line[i] == 'V'){
            numbers[i] = 5;
        }        
        if(line[i] == 'X'){
            numbers[i] = 10;
        }
        if(line[i] == 'L'){
            numbers[i] = 50;
        }
        if(line[i] == 'C'){
            numbers[i] = 100;
        }
        if(line[i] == 'D'){
            numbers[i] = 500;
        }
        if(line[i] == 'M'){
            numbers[i] = 1000;
        }
        count++;

    }

    for(int i = 0; i < count; i++){
       if(i != count - 1){ 
        if(numbers[i] >= numbers[i+1]){
            sum = sum + numbers[i];
        }
        else{
            sum = sum - numbers[i];
        }
       }
       else{
           sum = sum + numbers[i];
       }


    }

    cout << sum;
    arabic << sum;




只需要等待 2 天标记为答案


推荐阅读