2011年6月18日土曜日

TopCoder SRM189 Div2 300Pts

引き続き英語の速読とJavaのトレーニング。今日の問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。

問題を説明する。切り上げ、切り捨てについての問題である。二つの数値num、cutoffが文字列で与えられる。cutoffについては、0\.[0-9]{4}(正規表現)という形で与えられる。単純に言えば、cutoffは0より大きく1より小さい値で、小数点以下は4桁で表されている。numの小数点以下がcutoff以上であれば小数点以下を切り上げて、そうでなければ小数点以下を切り捨てるメソッドを作成せよ。なお、cutoffが0.5000が通常の四捨五入に相当する。

私の解答はこちら。

public class CutoffRounder {
 public int round(String num, String cutoff) {
  double numD = Double.parseDouble(num);
  double numCO = Double.parseDouble(cutoff);
  double dec = 0.0;
  dec = numD - (int)numD;
  if( dec > numCO ) return (int)(numD+1);
  else return (int)numD;
 }
}

得点は287.40/300。numの小数部分だけを取り出して比較するという方針で回答した。最後に、one-linerの綺麗な回答を見つけたので紹介する。

public class CutoffRounder {
 public int round(String num, String cutoff) {
  return (int)(Double.parseDouble(num)-Double.parseDouble(cutoff)+1);
 }
}

0 件のコメント:

コメントを投稿

フォロワー

ブログ アーカイブ

ページビューの合計