C++

Сумма римских чисел, результат тоже в римской системе исчисления

#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;
}
Добавлено: 05 Января 2014 06:45:30 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...