プログラマメモ2 - programmer no memo2

2685 - ようやく80問とけた。100問まであと20問... 2011/06/16

そしてPKU
ようやく80問とけた。100問まであと20問
簡単な問題。

2685 -- Numeral System

実は、charをintにするのに手間取った...
Character.getNumericValueを使いました。

package p2685;

import java.io.IOException;
import java.util.Scanner;

public class Main {
public static void main(String[] args) throws IOException {
Scanner scanner = new Scanner(System.in);
int c = scanner.nextInt();
scanner.nextLine();
for (int i = 0; i < c; i++) {
String line = scanner.nextLine();
System.out.println(to_s(a(line)));
}
}

static int a(String line) {

String[] ss = line.split(" ");
int a = 0;
for (String s : ss) {
a += to_n(s);
}
return a;
}

static String to_s(int n) {
StringBuilder sb = new StringBuilder();
int i = n / 1000;
if (i == 1) {
sb.append("m");
} else if (i != 0) {
sb.append(i).append("m");
}
i = (n % 1000) / 100;
if (i == 1) {
sb.append("c");
} else if (i != 0) {
sb.append(i).append("c");
}
i = (n % 100) / 10;
if (i == 1) {
sb.append("x");
} else if (i != 0) {
sb.append(i).append("x");
}
i = n % 10;
if (i == 1) {
sb.append("i");
} else if (i != 0) {
sb.append(i).append("i");
}

return sb.toString();
}

static int to_n(String s) {
char[] cs = s.toCharArray();
int a = 0;
int i = 1;
for (char c : cs) {
if (Character.isDigit(c)) {
i = Character.getNumericValue(c);
continue;
}
// mcxi
switch (c) {
case 'm':
a += 1000 * i;
break;
case 'c':
a += 100 * i;
break;
case 'x':
a += 10 * i;
break;
case 'i':
a += 1 * i;
break;
}
i = 1;
}

return a;
}
}

: