import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Sample176 {

	public static List<Rational> rationalizes(final double d) {
		final Map<Rational, Double> map = new HashMap<Rational, Double>();
		for (int index = 1; index < 10; index++) {
			int nume = (int) (d * index);
			Rational r1 = new Rational(nume, index);
			Rational r2 = new Rational(nume + 1, index);
			if ((r2.doubleValue() - d) - (d - r1.doubleValue()) > 0) {
				map.put(r1, Math.abs(r1.doubleValue() - d));
			} else {
				map.put(r2, Math.abs(r2.doubleValue() - d));
			}
		}
		List<Rational> result = new ArrayList<Rational>(map.keySet());
		Collections.sort(result, new Comparator<Rational>() {
			public int compare(Rational o1, Rational o2) {
				return Double.compare(map.get(o1), map.get(o2));
			}
		});
		return result;
	}

	public static void main(String[] args) {
		System.out.println(rationalizes(1.732051));
		System.out.println(rationalizes(3.141593));
		System.out.println(rationalizes((double) 1920 / 1080));
	}

}

class Rational extends Number {
	public final int numerator;
	public final int denominator;

	public Rational(int p, int q) {
		int nume = p;
		int deno = q;
		if (deno == 0) {
			throw new IllegalArgumentException("#N/A");
		} else if (nume == 0) {
			deno = 1;
		} else if (deno < 0) {
			nume *= -1;
			deno *= -1;
		}
		int r = gcd(nume, deno);
		numerator = nume / r;
		denominator = deno / r;
	}

	private int gcd(int n, int m) {
		int p = n;
		int q = m;
		int r = p % q;
		while (r > 0) {
			p = q;
			q = r;
			r = p % q;
		}
		return q;
	}


	@Override
	public int intValue() {
		return numerator / denominator;
	}
	@Override
	public long longValue() {
		return this.intValue();
	}
	@Override
	public float floatValue() {
		return (float) this.doubleValue();
	}
	@Override
	public double doubleValue() {
		return (double) numerator / denominator;
	}


	@Override
	public int hashCode() {
		return numerator + denominator * 7;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj) return true;
		if (!(obj instanceof Rational)) return false;
		Rational other = (Rational) obj;
		return this.denominator == other.denominator
			&& this.numerator == other.numerator;
	}

	@Override
	public String toString() {
		return String.format("%d/%d", numerator, denominator);
	}
}
