Continued fraction/Arithmetic/Construct from rational number: Difference between revisions
Content added Content deleted
(Added Java) |
|||
Line 719: | Line 719: | ||
│0 2│3│2 1 7│1 5 2│3 7│1 2 2 2 2 2 2 2 2 2 6 1 2 4 1 1 2│_2 25 1 2│ |
│0 2│3│2 1 7│1 5 2│3 7│1 2 2 2 2 2 2 2 2 2 6 1 2 4 1 1 2│_2 25 1 2│ |
||
└───┴─┴─────┴─────┴───┴─────────────────────────────────┴─────────┘</lang> |
└───┴─┴─────┴─────┴───┴─────────────────────────────────┴─────────┘</lang> |
||
=={{header|Java}}== |
|||
{{trans|Kotlin}} |
|||
{{works with|Java|9}} |
|||
<lang Java>import java.util.Iterator; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
public class ConstructFromRationalNumber { |
|||
private static class R2cf implements Iterator<Integer> { |
|||
private int num; |
|||
private int den; |
|||
R2cf(int num, int den) { |
|||
this.num = num; |
|||
this.den = den; |
|||
} |
|||
@Override |
|||
public boolean hasNext() { |
|||
return den != 0; |
|||
} |
|||
@Override |
|||
public Integer next() { |
|||
int div = num / den; |
|||
int rem = num % den; |
|||
num = den; |
|||
den = rem; |
|||
return div; |
|||
} |
|||
} |
|||
private static void iterate(R2cf generator) { |
|||
generator.forEachRemaining(n -> System.out.printf("%d ", n)); |
|||
System.out.println(); |
|||
} |
|||
public static void main(String[] args) { |
|||
List<Map.Entry<Integer, Integer>> fracs = List.of( |
|||
Map.entry(1, 2), |
|||
Map.entry(3, 1), |
|||
Map.entry(23, 8), |
|||
Map.entry(13, 11), |
|||
Map.entry(22, 7), |
|||
Map.entry(-151, 77) |
|||
); |
|||
for (Map.Entry<Integer, Integer> frac : fracs) { |
|||
System.out.printf("%4d / %-2d = ", frac.getKey(), frac.getValue()); |
|||
iterate(new R2cf(frac.getKey(), frac.getValue())); |
|||
} |
|||
System.out.println("\nSqrt(2) ->"); |
|||
List<Map.Entry<Integer, Integer>> root2 = List.of( |
|||
Map.entry( 14_142, 10_000), |
|||
Map.entry( 141_421, 100_000), |
|||
Map.entry( 1_414_214, 1_000_000), |
|||
Map.entry(14_142_136, 10_000_000) |
|||
); |
|||
for (Map.Entry<Integer, Integer> frac : root2) { |
|||
System.out.printf("%8d / %-8d = ", frac.getKey(), frac.getValue()); |
|||
iterate(new R2cf(frac.getKey(), frac.getValue())); |
|||
} |
|||
System.out.println("\nPi ->"); |
|||
List<Map.Entry<Integer, Integer>> pi = List.of( |
|||
Map.entry( 31, 10), |
|||
Map.entry( 314, 100), |
|||
Map.entry( 3_142, 1_000), |
|||
Map.entry( 31_428, 10_000), |
|||
Map.entry( 314_285, 100_000), |
|||
Map.entry( 3_142_857, 1_000_000), |
|||
Map.entry( 31_428_571, 10_000_000), |
|||
Map.entry(314_285_714, 100_000_000) |
|||
); |
|||
for (Map.Entry<Integer, Integer> frac : pi) { |
|||
System.out.printf("%9d / %-9d = ", frac.getKey(), frac.getValue()); |
|||
iterate(new R2cf(frac.getKey(), frac.getValue())); |
|||
} |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> 1 / 2 = 0 2 |
|||
3 / 1 = 3 |
|||
23 / 8 = 2 1 7 |
|||
13 / 11 = 1 5 2 |
|||
22 / 7 = 3 7 |
|||
-151 / 77 = -1 -1 -24 -1 -2 |
|||
Sqrt(2) -> |
|||
14142 / 10000 = 1 2 2 2 2 2 1 1 29 |
|||
141421 / 100000 = 1 2 2 2 2 2 2 3 1 1 3 1 7 2 |
|||
1414214 / 1000000 = 1 2 2 2 2 2 2 2 3 6 1 2 1 12 |
|||
14142136 / 10000000 = 1 2 2 2 2 2 2 2 2 2 6 1 2 4 1 1 2 |
|||
Pi -> |
|||
31 / 10 = 3 10 |
|||
314 / 100 = 3 7 7 |
|||
3142 / 1000 = 3 7 23 1 2 |
|||
31428 / 10000 = 3 7 357 |
|||
314285 / 100000 = 3 7 2857 |
|||
3142857 / 1000000 = 3 7 142857 |
|||
31428571 / 10000000 = 3 7 476190 3 |
|||
314285714 / 100000000 = 3 7 7142857 |
|||
</pre> |
|||
=={{header|Julia}}== |
=={{header|Julia}}== |