import java.util.*;
public class DecimalExpansion {
public static class Result {
public final String nonRepeatingFraction;
public final String repeatingFraction;
private Result(String nonRepeatingFraction, String repeatingFraction) {
this.nonRepeatingFraction = nonRepeatingFraction;
this.repeatingFraction = repeatingFraction;
}
}
public static Result rationalNumberToDecimal(int a, int b) {
StringBuilder decimalExpansion = new StringBuilder();
Map<Integer, Integer> remainderToPosition = new HashMap<>();
int remainder = a % b;
while (!remainderToPosition.containsKey(remainder)) {
if (remainder == 0)
return new Result(decimalExpansion.toString(), "");
remainderToPosition.put(remainder, decimalExpansion.length());
remainder *= 10;
decimalExpansion.append(remainder / b);
remainder %= b;
}
int positionOfRepeatingPart = remainderToPosition.get(remainder);
return new Result(decimalExpansion.substring(0, positionOfRepeatingPart),
decimalExpansion.substring(positionOfRepeatingPart));
}
// Test
public static void main(String[] args) {
int a = 1;
int b = 24;
Result res = rationalNumberToDecimal(a, b);
System.out.println("Number: 0." + res.nonRepeatingFraction + res.repeatingFraction);
if (res.repeatingFraction.length() > 0) {
System.out.println("Non-repeating part: " + res.nonRepeatingFraction);
System.out.println("Repeating part: " + res.repeatingFraction);
} else {
System.out.println("non-repeating");
}
}
}