Seu objetivo é escrever um código que produza a menor seqüência decimal exclusiva para a fração de entrada. Não há duas frações com o mesmo denominador que possam ter a mesma saída, embora seja possível que frações com denominadores diferentes tenham a mesma representação.
Tome 2 números inteiros como entrada, o primeiro é o numerador, o segundo é o denominador.
Por exemplo:
n d output
----- ------
0 13: 0.00
1 13: 0.07
2 13: 0.1
3 13: 0.2
4 13: 0.30
5 13: 0.38
etc.
3/13
é a única fração com um denominador 13 que começa com 0.2
, portanto, não são necessários mais dígitos. 4/13
e 5/13
ambos começam com 0.3
, portanto, é necessário outro dígito para distinguir entre eles.
Você pode emitir números maiores que -1 e menores que 1 com ou sem zero antes do ponto decimal, desde que a saída seja consistente, ou seja, 0.5
e .5
seja o mesmo número e ambos sejam válidos. Nenhum outro zeros à esquerda é permitido. Zeros à direita devem ser mostrados se forem necessários para distinguir a saída de outro valor.
Você não pode arredondar nenhum número para longe de zero; eles devem ser truncados. Não deve haver espaços à esquerda ou à direita. Opcionalmente, pode haver uma nova linha final à direita.
Mais valores de teste:
n d output
---------- ------
0 1: 0 (this 0 may not be removed because there's no decimal point)
5 1: 5
0 3: 0.0 (or .0)
4 3: 1.3
5 3: 1.6
10 8: 1.2
11 8: 1.3
12 8: 1.5
-496 -38: 13.05
458 -73: -6.27
70 106: 0.660 (or .660)
255 123: 2.07
256 -123: -2.081
-257 -123: 2.089
-258 123: -2.09
258 -152: -1.697
-259 152: -1.70
260 152: 1.710
272 195: 1.39
380 247: 1.538
455 -455: -1.000
-44 891: -0.049 (or -.049)
123 1234: 0.099 (or .099)
Em cada caso, a saída e o denominador são suficientes para calcular exclusivamente o numerador.
/b
ei
para,p
assim você pode codificá-los dentro dep
si e apenas pegar um único parâmetro. Além disso, a resposta é apenasn
para que você não precise calculá-la novamente. Eu tenho uma versão recursiva ES6 vagamente baseado em isso em meros 86 bytes ...