To pytanie nie musi dotyczyć tylko kończenia miejsc po przecinku - powtarzające się miejsca po przecinku można również konwertować na ułamki za pomocą algorytmu.
Twoim zadaniem jest stworzenie programu, który pobiera dziesiętną liczbę dziesiętną jako dane wejściowe, i wypisuje odpowiedni licznik i mianownik (w najniższych terminach), który generuje to rozwinięcie dziesiętne. Ułamki większe niż 1 powinny być reprezentowane jako ułamki niewłaściwe, takie jak 9/5
. Możesz założyć, że dane wejściowe będą dodatnie.
Powtarzany ułamek dziesiętny zostanie podany w tym formacie:
5.3.87
z powtórzeniem wszystkiego po drugiej kropce:
5.3878787878787...
Twój program wyświetli dwie liczby całkowite reprezentujące licznik i mianownik, oddzielone ukośnikiem (lub równoważną formą w twoim języku, jeśli nie wypisujesz zwykłego tekstu):
889/165
Zauważ, że kończące miejsca po przecinku nie będą miały nic po drugiej kropce, a miejsca po przecinku bez powtarzalnych części dziesiętnych nie będą miały nic między dwiema kropkami.
Przypadki testowe
Te przypadki testowe obejmują wszystkie wymagane przypadki narożne:
0..3 = 1/3
0.0.3 = 1/30
0.00.3 = 1/300
0.6875. = 11/16
1.8. = 9/5
2.. = 2/1
5..09 = 56/11
0.1.6 = 1/6
2..142857 = 15/7
0.01041.6 = 1/96
0.2.283950617 = 37/162
0.000000.1 = 1/9000000
0..9 = 1/1
0.0.9 = 1/10
0.24.9 = 1/4
Jeśli chcesz, możesz również założyć, że ułamki bez części całkowitych nie mają nic po lewej stronie pierwszej kropki. Możesz to przetestować za pomocą tych opcjonalnych przypadków testowych:
.25. = 1/4
.1.6 = 1/6
..09 = 1/11
.. = 0/1
(in lowest terms)
tzn. frakcja musi zostać uproszczona.
13
zamiast 13/1
?
1.9999...
i wyjściowe2/1
1.9999.
jest 19999/10000
, 2/1
jeśli potrzebujesz 1..9
, prawda?
9/99
?