Hatena::Grouptopcoder

hama_DU@TopCoderへの道

2012-03-03SRM389 (Practice)

SRM 389 ApproximateDivision

|  SRM 389 ApproximateDivision - hama_DU@TopCoderへの道 を含むブックマーク はてなブックマーク -  SRM 389 ApproximateDivision - hama_DU@TopCoderへの道

http://www.topcoder.com/stat?c=problem_statement&pm=6125

  • 方針を検討
    • 何やら数式が書いてある・・・
    • 読む。b以上の2の乗数tを使い計算せよ、と。
    • やるだけ?
  • 実装
  • サンプル通る。
    • こんなに簡単なわけがない
      • きっと何か罠があるに違いない。
    • しばらく変なケースを探す。
      • 特に見つからない。
  • 出した

public class ApproximateDivision {
	public double quotient(int a, int b, int terms) {
		double ans = 0.0d;
		
		long t = 1;
		while (t < b) {
			t *= 2;
		}
		long c = t - b;
		
		long cc = 1;
		long tt = t;
		double val = (double) cc /tt;
		for (int z = 0 ; z < terms ; z++) {	
			ans += val;
			val = (val * c) / t;
		}
		return ans * a;
	}
}