2011年8月28日日曜日

TopCoder SRM236 Div2 250Pts

このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。それでは、問題について説明する。

大きな数というのは指数表記される。"基数部^指数部"という形式で与えられた二つの数値を表す文字列が与えられたときに、大きい方の値を示す文字列を返せ。数値の比較には実際の値を比較するのではなく、数学的トリック、つまり対数を取るということを用いるとよい。なお、二つの値が等しいということは無いものとする。

私の解答はこちら。

public class MassiveNumbers {
 public String getLargest(String numberA, String numberB) {
  int[] A = new int[2];
  int[] B = new int[2];
  String[] sA = numberA.split("\\^"); // \\^としないと^という文字を指さないことに注意
  String[] sB = numberB.split("\\^");
  for( int i=0 ; i<2 ; i++ ){
   A[i] = Integer.parseInt(sA[i]);
   B[i] = Integer.parseInt(sB[i]);
  }
  return A[1]*Math.log(A[0]) > B[1]*Math.log(B[0]) ? numberA : numberB;
 }
}

得点は241.06/250、中央値は約211点。StringTokenizerというクラスが目に留まったので、近いうちに調べてみることにしよう。

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計