Сумма римских чисел, результат тоже в римской системе исчисления
#define NUM 10
#define ROMAN_NUMS_SIZE 7
#include <iostream>
#include <cctype>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
char roman_nums[ROMAN_NUMS_SIZE] = { 'I','V','X','L', 'C', 'D', 'M' };
int arabic_vals[ROMAN_NUMS_SIZE] = { 1, 5, 10, 50, 100, 500, 1000 };
int ROME (char x[NUM])
{
char ROME[8] = {'M','D','C','L','X','V','I','{EDIT_TEXT}'};
int c = 0;
int c1 = 1, c2 = 5, c3 = 10, c4 = 50, c5 = 100, c6 = 500, c7 = 1000;
for (int i = 0; i < NUM; i++)
{
if (x[i] == '+')
{
break;
}
else if (isalpha(x[i]) == 1)
{
if (x[i] == 'C' && x[i + 1] == 'M')
{
c = c - 100;
}
else if (x[i] == 'X' && x[i + 1] == 'M')
{
c = c - 10;
}
else if (x[i] == 'I' && x[i + 1] == 'M')
{
c = c - 1;
}
else if (x[i] == ROME[0])
{
c += c7;
}
else if (x[i] == 'C' && x[i + 1] == 'D')
{
c = c - 100;
}
else if (x[i] == 'X' && x[i + 1] == 'D')
{
c = c - 10;
}
else if (x[i] == 'I' && x[i + 1] == 'D')
{
c = c - 1;
}
else if (x[i] == ROME[1])
{
c += c6;
}
else if (x[i] == 'I' && x[i + 1] == 'C')
{
c = c - 1;
}
else if (x[i] == 'X' && x[i + 1] == 'C')
{
c = c - 10;
}
else if (x[i] == ROME[2])
{
c += c5;
}
else if (x[i] == 'I' && x[i + 1] == 'L')
{
c = c - 1;
}
else if (x[i] == 'X' && x[i + 1] == 'L')
{
c = c - 10;
}
else if (x[i] == ROME[3])
{
c += c4;
}
else if (x[i] == 'I' && x[i + 1] == 'X')
{
c = c - 1;
}
else if (x[i] == ROME[4])
{
c += c3;
}
else if (x[i] == 'I' && x[i + 1] == 'V')
{
c = c - 1;
}
else if (x[i] == ROME[5])
{
c += c2;
}
else if (x[i] == ROME[6])
{
c += c1;
}
else continue;
}
else break;
}
return c;
}
int main()
{
char x[10], y[10];
cin >> x >> y;
int s = ROME(x);
int q = ROME(y);
int i = 0;
int num = s + q;
char romnum[BUFSIZ];
char *rnptr = romnum;
for(i = ROMAN_NUMS_SIZE - 1; i >= 0; --i)
{
while(num >= arabic_vals[i])
{
if((num >= arabic_vals[i] * 4) && (i != ROMAN_NUMS_SIZE))
{
num -= arabic_vals[i] * 4;
*rnptr++ = roman_nums[i];
*rnptr++ = roman_nums[i + 1];
}
else
{
num -= arabic_vals[i];
*rnptr++ = roman_nums[i];
}
}
}
*rnptr = '{EDIT_TEXT}';
printf("%s\n\n", romnum);
system("PAUSE");
return 0;
}
Комментарии:
Нету комментариев для вывода...