Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

３乗根

$x^3 = q$ の解は漸化式 $x_{n+1} = x_n - \frac{x_{n}^3 - q}{3x_{n}^2}$ を計算していくことで近似的に求めることができます。

$x_1$ に正の数 $\frac{q}{2}$ をいれ

$x_2 = x_1 - \frac{x_{1}^3 - q}{3x_{1}^2}$、$x_3 = x_2 - \frac{x_{2}^3 - q}{3x_{2}^2}$、…　と計算します。

この計算をしながら、

$|x^3 - q|$ の値が、十分小さくなったところで、計算をやめ、最後に計算した $x_n$ を $x^3 = q$ の近似解とします。

この方法に従って、入力された正の整数 $q$ に対し、 $q$ の３乗根の近似値を出力するプログラムを作成してください。ただし、「十分小さくなった」という判定は $|x^3 - q| < 0.00001 q$ を用いてください。

入力

複数のデータセットが与えられる。各データセットに $q$ ($1 \leq q < 2^{31}$)（整数）が一行に与えられる。入力の終わりは -1 である。

データセットの数は 50 を超えない。

出力

各データセットに対して $x$ （実数）を１行に出力する。出力結果に 0.00001 以下の誤差を含んでもよい。

Sample Input

15
15
-1

Output for the Sample Input

2.466212
2.466212

Solution in JAVA (judge verdict: Wrong Answer)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;


public class Main {
	private	static	BufferedReader	br = null;

	static {
		br = new BufferedReader(new InputStreamReader(System.in));
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HashMap<Integer, Double>	result = new HashMap<Integer, Double>();
		int							key    = 0;
		double						value  = 0;

		while ((key = parseKey()) != -1) {
			if (result.containsKey(key)) {
				value = result.get(key);
			}
			else {
				value = calc(key);
				result.put(key, value);
			}
			System.out.printf("%.6f\n", value);
		}
	}

	private static double calc(int key) {
		double	x = (double)key / 2.0;

		while (true) {
			x -= (Math.pow(x, 3.0) - (double)key) / (3 * Math.pow(x, 2.0));
			if (Math.abs(Math.pow(x, 3.0) - (double)key) < 1e-6f) {
				break;
			}
		}
		
		return x;
	}

	private static int parseKey() {
		int		key   = -1;
		String	stdin = null;

		if ((stdin = parseStdin()) != null) {
			if (!stdin.isEmpty()) {
				key = Integer.parseInt(stdin);
			}
		}
		
		return key;
	}

	private static String parseStdin() {
		String	stdin = null;

		try {
			String line = br.readLine();
			if (line != null) {
				if (!line.isEmpty()) {
					stdin = line;
				}
			}
		}
		catch (IOException e) {}

		return stdin;
	}
}