Problem Statement
Elly understands that working with infinite decimal fractions is going to be very difficult, so she first wants to find a good way to approximate floating point numbers with decimal representations that are finite. Your task is to help her in this mission. You will be given a
Given a fraction F = A/B, where 0 <= A < B, its quality of approximation with respect to number is calculated as follows:
- Let S be the decimal fraction (infinite or finite) representation of F.
- If S is infinite or the number of digits after the decimal point in S is greater than 6, only consider the first 6 decimals after the decimal point in S. Truncate the rest of the digits without performing any kind of rounding.
- If the number of digits after the decimal point in S is less than 6, append trailing zeroes to the right side until there are exactly 6 digits after the decimal point.
- The quality of approximation is the number of digits in the longest common prefix of S and number. The longest common prefix of two numbers is the longest string which is a prefix of the decimal representations of both numbers with no extra leading zeroes. For example, "3.14" is the longest common prefix of 3.1428 and 3.1415.
Definition
- Class:
- BestApproximationDiv1
- Method:
- findFraction
- Parameters:
- int, String
- Returns:
- String
- Method signature:
- String findFraction(int maxDen, String number)
- (be sure your method is public)
Constraints
- maxDen will be between 1 and 1000, inclusive.
- number will contain exactly 8 characters.
- number will consist of a digit '0', followed by a period ('.'), followed by exactly six digits ('0'-'9').
Examples
42
"0.141592"
Returns: "1/7 has 3 exact digits"
3 plus the current approximation yields an approximation of Pi.
3
"0.133700"
Returns: "0/1 has 1 exact digits"
Not a lot of options here.
1000
"0.123456"
Returns: "10/81 has 7 exact digits"
1000
"0.420000"
Returns: "21/50 has 7 exact digits"
This one can be represented in more than one way. Be sure to choose the one with the lowest denominator.
100
"0.909999"
Returns: "10/11 has 4 exact digits"
Even though 91/100 is a much closer approximation, 10/11 matches up to 3 digits, and 91/100 only to one.
115
"0.141592"
Returns: "16/113 has 7 exact digits"
A better approximation for the decimal part of Pi.
1000
"0.272727"
Returns: "3/11 has 7 exact digits"
42
"0.409488"
Returns: "9/22 has 4 exact digits"
300
"0.431233"
Returns: "69/160 has 5 exact digits"
85
"0.606618"
Returns: "20/33 has 4 exact digits"
656
"0.120014"
Returns: "3/25 has 5 exact digits"
423
"0.603801"
Returns: "93/154 has 5 exact digits"
901
"0.778383"
Returns: "425/546 has 6 exact digits"
449
"0.880681"
Returns: "155/176 has 7 exact digits"
10
"0.228289"
Returns: "2/9 has 3 exact digits"
689
"0.953252"
Returns: "469/492 has 7 exact digits"
618
"0.229419"
Returns: "39/170 has 6 exact digits"
264
"0.553282"
Returns: "109/197 has 5 exact digits"
959
"0.257444"
Returns: "121/470 has 6 exact digits"
594
"0.122264"
Returns: "67/548 has 6 exact digits"
236
"0.106750"
Returns: "11/103 has 5 exact digits"
87
"0.774579"
Returns: "24/31 has 4 exact digits"
738
"0.554026"
Returns: "241/435 has 6 exact digits"
201
"0.930747"
Returns: "121/130 has 5 exact digits"
217
"0.767719"
Returns: "119/155 has 5 exact digits"
484
"0.578583"
Returns: "254/439 has 6 exact digits"
143
"0.174823"
Returns: "25/143 has 6 exact digits"
652
"0.485925"
Returns: "259/533 has 6 exact digits"
214
"0.412908"
Returns: "64/155 has 6 exact digits"
585
"0.143552"
Returns: "59/411 has 7 exact digits"
246
"0.801322"
Returns: "121/151 has 6 exact digits"
147
"0.930087"
Returns: "93/100 has 5 exact digits"
258
"0.458615"
Returns: "61/133 has 5 exact digits"
76
"0.268266"
Returns: "11/41 has 5 exact digits"
453
"0.234343"
Returns: "15/64 has 5 exact digits"
859
"0.514363"
Returns: "376/731 has 7 exact digits"
370
"0.989135"
Returns: "91/92 has 6 exact digits"
816
"0.159083"
Returns: "7/44 has 5 exact digits"
117
"0.789415"
Returns: "15/19 has 5 exact digits"
663
"0.495234"
Returns: "52/105 has 6 exact digits"
424
"0.688277"
Returns: "223/324 has 6 exact digits"
346
"0.812149"
Returns: "134/165 has 5 exact digits"
601
"0.928205"
Returns: "181/195 has 7 exact digits"
571
"0.472149"
Returns: "161/341 has 6 exact digits"
282
"0.232466"
Returns: "43/185 has 5 exact digits"
612
"0.995556"
Returns: "224/225 has 6 exact digits"
911
"0.215444"
Returns: "53/246 has 6 exact digits"
946
"0.607272"
Returns: "167/275 has 7 exact digits"
584
"0.328601"
Returns: "139/423 has 6 exact digits"
444
"0.108109"
Returns: "4/37 has 6 exact digits"
529
"0.830362"
Returns: "93/112 has 5 exact digits"
615
"0.813678"
Returns: "345/424 has 6 exact digits"
813
"0.314310"
Returns: "83/264 has 5 exact digits"
900
"0.382321"
Returns: "13/34 has 5 exact digits"
806
"0.209891"
Returns: "123/586 has 6 exact digits"
164
"0.622143"
Returns: "28/45 has 4 exact digits"
600
"0.082740"
Returns: "35/423 has 6 exact digits"
751
"0.428571"
Returns: "3/7 has 7 exact digits"
996
"0.919941"
Returns: "632/687 has 7 exact digits"
900
"0.129411"
Returns: "11/85 has 7 exact digits"
609
"0.469879"
Returns: "39/83 has 7 exact digits"
515
"0.166666"
Returns: "1/6 has 7 exact digits"
974
"0.987261"
Returns: "155/157 has 7 exact digits"
987
"0.181286"
Returns: "31/171 has 7 exact digits"
518
"0.436507"
Returns: "55/126 has 7 exact digits"
792
"0.296208"
Returns: "125/422 has 7 exact digits"
694
"0.228571"
Returns: "8/35 has 7 exact digits"
858
"0.693877"
Returns: "34/49 has 7 exact digits"
552
"0.259615"
Returns: "27/104 has 7 exact digits"
956
"0.979166"
Returns: "47/48 has 7 exact digits"
98
"0.642857"
Returns: "9/14 has 7 exact digits"
262
"0.333333"
Returns: "1/3 has 7 exact digits"
141
"0.480000"
Returns: "12/25 has 7 exact digits"
171
"0.509803"
Returns: "26/51 has 7 exact digits"
150
"0.823529"
Returns: "14/17 has 7 exact digits"
283
"0.032520"
Returns: "4/123 has 7 exact digits"
368
"0.112299"
Returns: "21/187 has 7 exact digits"
642
"0.870588"
Returns: "74/85 has 7 exact digits"
480
"0.743902"
Returns: "61/82 has 7 exact digits"
448
"0.470588"
Returns: "8/17 has 7 exact digits"
760
"0.314545"
Returns: "173/550 has 7 exact digits"
487
"0.170212"
Returns: "8/47 has 7 exact digits"
861
"0.004756"
Returns: "4/841 has 7 exact digits"
504
"0.690647"
Returns: "96/139 has 7 exact digits"
456
"0.564516"
Returns: "35/62 has 7 exact digits"
822
"0.914285"
Returns: "32/35 has 7 exact digits"
456
"0.092342"
Returns: "41/444 has 7 exact digits"
136
"0.943820"
Returns: "84/89 has 7 exact digits"
999
"0.367816"
Returns: "32/87 has 7 exact digits"
636
"0.658602"
Returns: "245/372 has 7 exact digits"
233
"0.920454"
Returns: "81/88 has 7 exact digits"
679
"0.535294"
Returns: "91/170 has 7 exact digits"
200
"0.785714"
Returns: "11/14 has 7 exact digits"
574
"0.070671"
Returns: "20/283 has 7 exact digits"
275
"0.375000"
Returns: "3/8 has 7 exact digits"
288
"0.694444"
Returns: "25/36 has 7 exact digits"
466
"0.825136"
Returns: "151/183 has 7 exact digits"
113
"0.066666"
Returns: "1/15 has 7 exact digits"
891
"0.889589"
Returns: "282/317 has 7 exact digits"
33
"0.700000"
Returns: "7/10 has 7 exact digits"
432
"0.864516"
Returns: "134/155 has 7 exact digits"
579
"0.968354"
Returns: "153/158 has 7 exact digits"
167
"0.947368"
Returns: "18/19 has 7 exact digits"
695
"0.620833"
Returns: "149/240 has 7 exact digits"
985
"0.193333"
Returns: "29/150 has 7 exact digits"
16
"0.333333"
Returns: "1/3 has 7 exact digits"
907
"0.697936"
Returns: "372/533 has 7 exact digits"
42
"0.000000"
Returns: "0/1 has 7 exact digits"
Zero
1000
"0.128124"
Returns: "41/320 has 6 exact digits"
1000
"0.128125"
Returns: "41/320 has 7 exact digits"
1000
"0.251199"
Returns: "105/418 has 6 exact digits"
888
"0.253740"
Returns: "220/867 has 6 exact digits"
945
"0.253749"
Returns: "220/867 has 6 exact digits"
999
"0.256240"
Returns: "195/761 has 6 exact digits"
1000
"0.256250"
Returns: "41/160 has 7 exact digits"
853
"0.258749"
Returns: "37/143 has 6 exact digits"
934
"0.258750"
Returns: "207/800 has 7 exact digits"
989
"0.502399"
Returns: "105/209 has 6 exact digits"
601
"0.502491"
Returns: "302/601 has 6 exact digits"
599
"0.502503"
Returns: "201/400 has 6 exact digits"
400
"0.507500"
Returns: "203/400 has 7 exact digits"
240
"0.512490"
Returns: "103/201 has 5 exact digits"
790
"0.512499"
Returns: "103/201 has 5 exact digits"
766
"0.522505"
Returns: "209/400 has 6 exact digits"
1000
"0.000001"
Returns: "0/1 has 6 exact digits"
1000
"0.001001"
Returns: "1/999 has 7 exact digits"
5
"0.200000"
Returns: "1/5 has 7 exact digits"
1000
"0.999999"
Returns: "999/1000 has 4 exact digits"
10
"0.000000"
Returns: "0/1 has 7 exact digits"
2
"0.500000"
Returns: "1/2 has 7 exact digits"
1000
"0.000000"
Returns: "0/1 has 7 exact digits"
113
"0.141592"
Returns: "16/113 has 7 exact digits"
1
"0.500000"
Returns: "0/1 has 1 exact digits"
13
"0.923076"
Returns: "12/13 has 7 exact digits"
3
"0.333333"
Returns: "1/3 has 7 exact digits"
1000
"0.005922"
Returns: "3/506 has 6 exact digits"
11
"0.909999"
Returns: "10/11 has 4 exact digits"
1
"0.999999"
Returns: "0/1 has 1 exact digits"
1000
"0.812983"
Returns: "313/385 has 6 exact digits"
323
"0.334113"
Returns: "68/203 has 4 exact digits"
10
"0.700000"
Returns: "7/10 has 7 exact digits"
999
"0.990990"
Returns: "110/111 has 7 exact digits"
1000
"0.009900"
Returns: "1/101 has 7 exact digits"
1000
"0.998999"
Returns: "990/991 has 6 exact digits"
1
"0.000000"
Returns: "0/1 has 7 exact digits"
100
"0.972972"
Returns: "36/37 has 7 exact digits"
1000
"0.039800"
Returns: "8/201 has 7 exact digits"
414
"0.801250"
Returns: "125/156 has 5 exact digits"
21
"0.952380"
Returns: "20/21 has 7 exact digits"
7
"0.142857"
Returns: "1/7 has 7 exact digits"
10
"0.100000"
Returns: "1/10 has 7 exact digits"
500
"0.908070"
Returns: "326/359 has 6 exact digits"
1
"0.000345"
Returns: "0/1 has 4 exact digits"