C++ 程序需要2个罗马数字作为输入,1个作为输出。这一解决方案似乎是行不通的。我能做些什么来防止上吊?

C++ 程序需要2个罗马数字作为输入,1个作为输出。这一解决方案似乎是行不通的。我能做些什么来防止上吊?,c++,C++,我在这里写的解决方案是我家庭作业中的一个练习。程序需要2个罗马数字作为输入,将它们相加并以罗马数字打印输出。当我把这个作为家庭作业提交时,它不起作用,因为这个解决方案似乎挂起了,而且它超过了老师允许的时间限制。我能做些什么来防止上吊 #include <iostream> using namespace std; int main() { int dec, decdig1, decdig2, decdig3, decdig4, rem; int sum1 = 0;

我在这里写的解决方案是我家庭作业中的一个练习。程序需要2个罗马数字作为输入,将它们相加并以罗马数字打印输出。当我把这个作为家庭作业提交时,它不起作用,因为这个解决方案似乎挂起了,而且它超过了老师允许的时间限制。我能做些什么来防止上吊

#include <iostream>
using namespace std;
int main()
{
    int dec, decdig1, decdig2, decdig3, decdig4, rem;
    int sum1 = 0;
    int sum2 = 0;
    char s, t, d, c;
    cin.get(t);

    while(t!='\n')
    {
        s=t;
        cin.get(t);
        if(s=='I'&&t!='V'&&t!='X')
        {
            sum2 = sum2 + 1;
        }
        if((s=='I'&&t=='V')||(s=='I'&&t=='X'))
        {
            sum2 = sum2 - 1;
        }
        if(s=='V')
        {
            sum2 = sum2 + 5;
        }
        if(s=='X'&&t!='L'&&t!='C')
        {
            sum2 = sum2 + 10;
        }
        if((s=='X'&&t=='L')||(s=='X'&&t=='C'))
        {
            sum2 = sum2 - 10;
        }
        if(s=='L')
        {
            sum2 = sum2 + 50;
        }
        if(s=='C'&&t!='D'&&t!='M')
        {
            sum2 = sum2 + 100;
        }
        if((s=='C'&&t=='D')||(s=='C'&&t=='M'))
        {
            sum2 = sum2 - 100;
        }
        if(s=='D')
        {
            sum2 = sum2 + 500;
        }
        if(s=='M')
        {
            sum2 = sum2 + 1000;
        }   
    }


    cin.get(c);

    while(c!='\n')
    {
        d=c;
        cin.get(c);
        if(d=='I'&&c!='V'&&c!='X')
        {
            sum1 = sum1 + 1;
        }
        if((d=='I'&&c=='V')||(d=='I'&&c=='X'))
        {
            sum1 = sum1 - 1;
        }
        if(d=='V')
        {
            sum1 = sum1 + 5;
        }
        if(d=='X'&&c!='L'&&c!='C')
        {
            sum1 = sum1 + 10;
        }
        if((d=='X'&&c=='L')||(d=='X'&&c=='C'))
        {
            sum1 = sum1 - 10;
        }
        if(d=='L')
        {
            sum1 = sum1 + 50;
        }
        if(d=='C'&&c!='D'&&c!='M')
        {
            sum1 = sum1 + 100;
        }
        if((d=='C'&&c=='D')||(d=='C'&&c=='M'))
        {
            sum1 = sum1 - 100;
        }
        if(d=='D')
        {
            sum1 = sum1 + 500;
        }
        if(d=='M')
        {
            sum1 = sum1 + 1000;
        }   
    }

    dec = sum1 + sum2;


    decdig1 = dec/1000;
    rem = dec%1000;
    decdig2= rem/100;
    rem= rem%100;
    decdig3= rem/10;
    rem= rem%10;
    decdig4= rem/1;
    rem= rem%1;

    if(decdig1 == 1)
    {
        cout<<"M";
    }

    if(decdig2== 1)
    {
        cout<<"C";
    }
    else if(decdig2 == 2)
    {
        cout<<"CC";
    }
    else if(decdig2 == 3)
    {
        cout<<"CCC";
    }
    else if(decdig2 == 4)
    {
        cout<<"CD";
    }
    else if(decdig2 == 5)
    {
        cout<<"D";
    }
    else if(decdig2 == 6)
    {
        cout<<"DC";
    }
    else if(decdig2 == 7)
    {
        cout<<"DCC";
    }
    else if(decdig2 == 8)
    {
        cout<<"DCCC";
    }
    else if(decdig2 == 9)
    {
        cout<<"CM";
    }


    if(decdig3 == 1)
    {
        cout<<"X";
    }
    else if(decdig3 == 2)
    {
        cout<<"XX";
    }
    else if(decdig3 == 3)
    {
        cout<<"XXX";
    }
    else if(decdig3 == 4)
    {
        cout<<"XL";
    }
    else if(decdig3 == 5)
    {
        cout<<"L";
    }
    else if(decdig3 == 6)
    {
        cout<<"LX";
    }
    else if(decdig3 == 7)
    {
        cout<<"LXX";
    }
    else if(decdig3 == 8)
    {
        cout<<"LXXX";
    }
    else if(decdig3 == 9)
    {
        cout<<"XC";
    }

    if(decdig4 == 1)
    {
        cout<<"I";
    }
    else if(decdig4 == 2)
    {
        cout<<"II";
    }
    else if(decdig4 == 3)
    {
        cout<<"III";
    }
    else if(decdig4 == 4)
    {
        cout<<"IV";
    }
    else if(decdig4 == 5)
    {
        cout<<"V";
    }
    else if(decdig4 == 6)
    {
        cout<<"VI";
    }
    else if(decdig4 == 7)
    {
        cout<<"VII";
    }
    else if(decdig4 == 8)
    {
        cout<<"VIII";
    }
    else if(decdig4 == 9)
    {
        cout<<"IX";
    }

}
#包括
使用名称空间std;
int main()
{
12月1日,12月1日,12月2日,3日,4日,rem;
int sum1=0;
int-sum2=0;
字符s,t,d,c;
cin.get(t);
而(t!='\n')
{
s=t;
cin.get(t);
如果(s=='I'&&t!='V'&&t!='X')
{
sum2=sum2+1;
}
如果((s='I'和&t='V')| |(s=='I'和&t=='X'))
{
sum2=sum2-1;
}
如果(s=='V')
{
sum2=sum2+5;
}
如果(s='X'&&t!='L'&&t!='C')
{
sum2=sum2+10;
}
如果((s='X'&&t='L')| |(s='X'&&t='C'))
{
sum2=sum2-10;
}
如果(s=='L')
{
sum2=sum2+50;
}
如果(s=='C'&&t!='D'&&t!='M')
{
sum2=sum2+100;
}
如果((s=='C'&t=='D')| |(s=='C'&t=='M'))
{
sum2=sum2-100;
}
如果(s=='D')
{
sum2=sum2+500;
}
如果(s=='M')
{
sum2=sum2+1000;
}   
}
cin.get(c);
而(c!='\n')
{
d=c;
cin.get(c);
如果(d='I'&&c!='V'&&c!='X')
{
sum1=sum1+1;
}
如果((d='I'&&c='V')| |(d='I'&&c='X'))
{
sum1=sum1-1;
}
如果(d='V')
{
sum1=sum1+5;
}
如果(d='X'&&c!='L'&&c!='c')
{
sum1=sum1+10;
}
如果((d='X'&&c='L')| |(d='X'&&c='c'))
{
sum1=sum1-10;
}
如果(d=='L')
{
sum1=sum1+50;
}
如果(d='C'&&C!='d'&&C!='M')
{
sum1=sum1+100;
}
如果((d='C'&&C='d')| |(d='C'&&C='M'))
{
sum1=sum1-100;
}
如果(d=='d')
{
sum1=sum1+500;
}
如果(d=='M')
{
sum1=sum1+1000;
}   
}
dec=sum1+sum2;
decdig1=dec/1000;
rem=dec%1000;
decdig2=rem/100;
rem=rem%100;
decdig3=rem/10;
雷姆=雷姆%10;
decdig4=rem/1;
rem=rem%1;
如果(decdig1==1)
{

当然,如果没有测试用例,我无法真正判断问题出在哪里,但很可能是因为while循环检查了'\n'。 输入中的最后一行可能没有新的空行,这可能会导致最后一个字符在无限循环中卡住,从而导致时间限制。 我建议使用以下内容:

while(cin.get(c)) { }

而不是你的第二个while循环。

你知道是什么输入导致程序没有响应吗?我忘了提到我不能使用数组或字符串,只是基本的东西。最多我可以使用函数。它适用于所有的输入。它似乎超过了时间限制,但我仍然不知道为什么。你是如何计时代码的?这个方法od不会输出解决方案如果您试图在控制台上运行程序时没有输入文件(与任务中预定义的测试用例不同),那么它当然会保持在无限循环中。请尝试使用包含所需测试用例的文件,或者如果您的IDE支持在运行前定义程序输入,那么它将保持在无限循环中。