トップ 一覧 Farm 検索 ヘルプ 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;
 }