Questa domanda non ha bisogno di applicarsi a decimali solo terminazione - decimali ripetizione possono anche essere convertiti in frazioni tramite un algoritmo.
Il tuo compito è creare un programma che accetta un decimale ripetuto come input e produrre il numeratore e il denominatore corrispondenti (in termini più bassi) che producono quell'espansione decimale. Le frazioni maggiori di 1 dovrebbero essere rappresentate come frazioni improprie come 9/5
. Si può presumere che l'input sarà positivo.
Il decimale ripetuto verrà fornito in questo formato:
5.3.87
con tutto dopo il secondo punto ripetuto, in questo modo:
5.3878787878787...
Il tuo programma produrrà due numeri interi che rappresentano il numeratore e il denominatore, separati da una barra (o dalla forma equivalente nella tua lingua se non produci testo semplice):
889/165
Notare che i decimali finali non avranno nulla dopo il secondo punto e che i decimali senza porzione decimale non ripetitiva non avranno nulla tra i due punti.
Casi test
Questi casi di test coprono tutti i casi angolari richiesti:
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
Se lo desideri, puoi anche supporre che le frazioni senza parti intere non abbiano nulla a sinistra del primo punto. Puoi verificarlo con questi casi di test opzionali:
.25. = 1/4
.1.6 = 1/6
..09 = 1/11
.. = 0/1
(in lowest terms)
cioè la frazione deve essere semplificata.
13
invece di 13/1
?
1.9999...
e output2/1
1.9999.
è 19999/10000
, per farti 2/1
avere bisogno 1..9
, no?
9/99
?