トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

05dc2.cpp

#include <iostream>
using namespace std;

int from_mcxi(char s[10])
{
	int t=0;
	
	// 最初の文字から見ていく
	for(int i=0; s[i]!='\0'; i++){
		// 数字だったら掛ける数を求める
		int kake=1;
		if(s[i]>='2' && s[i]<='9'){
			kake=s[i]-'0';
			i++;
		}
		//mcxiに応じて計算
		switch(s[i]){
			case 'm': t+=1000*kake; break;
			case 'c': t+=100*kake; break;
			case 'x': t+=10*kake; break;
			case 'i': t+=kake; break;
		}
	}
	return t;
} 

void to_mcxi(int x)
{
	// 1000の位
	int a=x/1000;
	if(a>0){
		if(a>2){
			cout << (char)(x/1000+'0');
		}
		cout << "m";
	}
	x%=1000;
	
	// 100の位
	a=x/100;
	if(a>0){
		if(a>2){
			cout << (char)(x/100+'0');
		}
		cout << "c";
	}
	x%=100;
	
	// 10の位
	a=x/10;
	if(a>0){
		if(a>2){
			cout << (char)(x/10+'0');
		}
		cout << "x";
	}
	x%=10;
	
	// 1の位
	if(x>0){
		if(x>1){
			cout << (char)(x+'0');
		}
		cout << "i";
	}
	cout << endl;
}

main()
{
	int n;
	
	cin >> n;
	for(int i=0; i<n; i++){
		char a[10],b[10];
		cin >> a >> b;
		int k=from_mcxi(a)+from_mcxi(b); // 計算して
		to_mcxi(k); // 答えをmcxiで出力
	}

	return 0;
}