とりとめもなく

 ACM/ICPC 2005国内予選問題をちょっと見てみる。
http://www.teu.ac.jp/icpc/jp/
Problem C が簡単そうだったのでやってみたらやっぱり簡単だった。
てことで、以下ソース。まぁ、結構適当な書きっぷりだけど(笑
ほんとはRuby勉強するネタにしたかったのだが、Cの方が向いてそうだったのでついつい…


#include
#include

int mcxi2i(char *str){
int m, c, x, i, tmp;
int result;
char *p;
m = c = x = i = 0;
tmp = 1;
result = 0;
for(p = str; *p != '\0'; p++){
switch(*p){
case 'm':
result += tmp * 1000;
tmp = 1;
break;
case 'c':
result += tmp * 100;
tmp = 1;
break;
case 'x':
result += tmp * 10;
tmp = 1;
break;
case 'i':
result += tmp;
tmp = 1;
break;
default:
tmp = atoi(p);
break;
}

}
return result;
}

void i2mcxi(int n){
int m, c, x, i;
int tmp;

m = n / 1000; n = n % 1000;
c = n / 100; n = n % 100;
x = n / 10; n = n % 10;
i = n;

if(m == 0)
;
else if (m == 1)
putchar('m');
else
printf("%dm",m);

if(c == 0)
;
else if (c == 1)
putchar('c');
else
printf("%dc",c);

if(x == 0)
;
else if (x == 1)
putchar('x');
else
printf("%dx",x);

if(i == 0)
;
else if (i == 1)
putchar('i');
else
printf("%di",i);

putchar('\n');
}


int main(void){
int max;
int i;
char *str1, *str2;

str1 = malloc(sizeof(char)*256);
str2 = malloc(sizeof(char)*256);

scanf("%d", &max);

for(i = 0; i < max; i++){
scanf("%s %s", str1, str2);
i2mcxi(mcxi2i(str1) + mcxi2i(str2));

}
return EXIT_SUCCESS;
}