Ocena użytkownikóww: ***** / 7
Nadesłany przez golabow, 09 lutego 2014 23:10
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
dodawanie_rzymskich.cpp:
//Dodawanie dwóch liczb rzymskich
//www.algorytm.org
#include<cstdio>
#include<cstring>
#include<string>
char t1[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
char * t2[] = {"CM", "CD", "XC", "XL", "IX", "IV", "I"};
int t3[] = {1000, 500, 100, 50, 10, 5, 1};
int t4[] = {900, 400, 90, 40, 9, 4, 1};
//Konwersja liczba rzymska -> liczba dziesietna
int RomanToDec(char * num)
{
int len = strlen(num);
int sum = 0;
int j = 0, i = 0;
while (i < len)
{
if (num[i] == t1[j])
{
sum += t3[j];
i++;
}
else if (i < len-1 && num[i] == t2[j][0] && num[i+1] == t2[j][1])
{
sum += t4[j];
i += 2;
}
else
j++;
}
return sum;
}
//Konwersja liczba dziesietna -> liczba rzymska
std::string DecToRoman(int n)
{
std::string wynik = "";
int j = 0;
while (n > 0)
{
if (n >= t3[j])
{
n -= t3[j];
wynik += t1[j];
}
else if (n >= t4[j])
{
n -= t4[j];
wynik += t2[j];
}
else
j++;
}
return wynik;
}
//Dodawanie dwóch liczb rzymskich
int main()
{
char tab1[1000], tab2[1000];
while (scanf("%s %s", t1, t2) > 0)
printf("%s\n", DecToRoman(RomanToDec(tab1) + RomanToDec(tab2)).c_str());
return 0;
}