Wydaje mi się, że wszystko jest OK, ale na spoju ciągle błędna odpowiedź. Może widzi ktoś błąd lub ma dane testowe (z outami)?
#include<iostream>
using namespace std;
#include<string.h>
int zamien (char x)
{
if (x == 'I') return 1;
else if (x == 'V') return 5;
else if (x == 'X') return 10;
else if (x == 'L') return 50;
else if (x == 'C') return 100;
else if (x == 'D') return 500;
else if (x == 'M') return 1000;
}
int main()
{
char a[20], b[20];
int c[20], d[20], e, f;
while (cin >> a >> b)
{
e = 0; f = 0;
for (int i = 0; i < strlen(a); i++)
c[i] = zamien(a[i]);
for (int j = 0; j < strlen(b); j++)
d[j] = zamien(b[j]);
for (int i = 0; i < strlen(a); i++)
{
if (c[i] >= c[i+1]) e += c[i];
else e -= c[i];
}
for (int j = 0; j < strlen(b); j++)
{
if (d[j] >= d[j+1]) f += d[j];
else f -= d[j];
}
e += f;
if (e/1000 == 2) { cout << "MM"; e -= 2000; }
else if (e/1000 == 1) { cout << "M"; e -= 1000; }
if (e/100 == 9) { cout << "CM"; e -= 900; }
else if (e/100 == 8) { cout << "DCCC"; e -= 800; }
else if (e/100 == 7) { cout << "DCC"; e -= 700; }
else if (e/100 == 6) { cout << "DC"; e -= 600; }
else if (e/100 == 5) { cout << "D"; e -= 500; }
else if (e/100 == 4) { cout << "CD"; e -= 400; }
else if (e/100 == 3) { cout << "CCC"; e -= 300; }
else if (e/100 == 2) { cout << "CC"; e -= 200; }
else if (e/100 == 1) { cout << "C"; e -= 100; }
if (e/10 == 9) cout << "XC";
else if (e/10 == 8) cout << "LXXX";
else if (e/10 == 7) cout << "LXX";
else if (e/10 == 6) cout << "LX";
else if (e/10 == 5) cout << "L";
else if (e/10 == 4) cout << "XL";
else if (e/10 == 3) cout << "XXX";
else if (e/10 == 2) cout << "XX";
else if (e/10 == 1) cout << "X";
if (e%10 == 9) cout << "IX";
else if (e%10 == 8) cout << "VIII";
else if (e%10 == 7) cout << "VII";
else if (e%10 == 6) cout << "VI";
else if (e%10 == 5) cout << "V";
else if (e%10 == 4) cout << "IV";
else if (e%10 == 3) cout << "III";
else if (e%10 == 2) cout << "II";
else if (e%10 == 1) cout << "I";
cout << endl;
}
return 0;
}