Codeforces #57 (div2) C "Capture Valerian"
問題:http://codeforces.com/problemset/problem/61/C
変換前基数と変換後基数かあるいは文字Rおよび変換前基数で表される数値が与えられる.変換後基数が与えられた場合は数値をその基数で表したもの,文字Rが与えられた場合はローマ数字で表したものを求める.
基数をもとに変換するか,ローマ数字の場合は大きい数字から引いていった文字を追加していく.
コード
import java.util.*; public class C { public static void main(String[] args) { Scanner s = new Scanner(System.in); int a = s.nextInt(); String b = s.next(); long c = s.nextLong(a); if (b.matches("\\d+")) { System.out.println(Long.toString(c, new Integer(b)).toUpperCase()); } else { String r = ""; int[] num = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; String[] val = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; for (; c > 0;) { for (int i = 0; i < num.length; ++i) { if (c >= num[i]) { c -= num[i]; r += val[i]; break; } } } System.out.println(r); } } }