Temos um número de ponto flutuante r
entre 0 e 1 e um número inteiro p
.
Encontre a fração de números inteiros com o menor denominador, que se aproxima r
com pelo menos p
precisão de dois dígitos.
- Entradas:
r
(um número de ponto flutuante) ep
(inteiro). - Saídas:
a
eb
inteiros, em quea/b
(flutuante) aproxima-ser
até osp
dígitos.b
é o menor número inteiro positivo possível.
Por exemplo:
- se
r=0.14159265358979
ep=9
, - então o resultado é
a=4687
eb=33102
, - porque
4687/33102=0.1415926530119026
.
Qualquer solução precisa funcionar em teoria com tipos de precisão arbitrária, mas as limitações causadas pelos tipos de precisão fixa das implementações não importam.
Precisão significa o número de dígitos após " 0.
" dentro r
. Assim, se r=0.0123
e p=3
, então, a/b
deve começar com 0.012
. Se os primeiros p
dígitos da parte fracionária de r
forem 0, o comportamento indefinido será aceitável.
Critérios de vitória:
- O algoritmo algoritmicamente mais rápido vence. A velocidade é medida em O (p).
- Se houver vários algoritmos mais rápidos, os ganhos mais curtos.
- Minha própria resposta está excluída do conjunto dos possíveis vencedores.
Ps a parte de matemática é realmente muito mais fácil, ao que parece, sugiro ler este post.
padEnd
ematch
? Você não pode apenasslice
cada corda no comprimento correto e depois subtraí-las?