algorytm.org

Implementacja w C/C++



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Zamiana z i na system rzymski - Implementacja w C/C++
Ocena użytkownikóww: *****  / 7
SłabyŚwietny
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;
}
Dodaj komentarz