Tivemos alguns desafios para a conversão de base, mas todos parecem se aplicar a valores inteiros. Vamos fazer isso com números reais!
O desafio
Entradas:
- Um número positivo real x , expresso na base 10. Isso pode ser tomado como um flutuador de precisão dupla ou como uma string. Para evitar problemas de precisão, o número pode ser considerado maior que 10 −6 e menor que 10 15 .
- Uma base alvo b . Este será um número inteiro de 2 a 36.
- Um número de dígitos fracionários n . Este será um número inteiro de 1 a 20.
Saída: a representação de x na base b com n dígitos fracionários.
Ao calcular a expressão de saída, os dígitos além do n- ésimo devem ser truncados (não arredondados). Por exemplo, x = 3.141592653589793
em base b = 3
é 10.0102110122...
, portanto, para n = 3
a saída seria 10.010
(truncamento), não 10.011
(arredondamento).
Para x e b que produzem um número finito de dígitos na parte fracionária, a representação infinita equivalente (truncada em n dígitos) também é permitida. Por exemplo, 4.5
em decimal também pode ser representado como 4.49999...
.
Não se preocupe com erros de ponto flutuante .
Formato de entrada e saída
x será dado sem zeros à esquerda. Se x for um número inteiro, você pode assumir que ele será fornecido com uma parte decimal zero ( 3.0
) ou sem parte decimal ( 3
).
A saída é flexível. Por exemplo, pode ser:
- Uma sequência que representa o número com um separador adequado (ponto decimal) entre partes inteiras e fracionárias. Dígitos
11
,12
etc. (para b além de 10) podem ser representados como letrasA
,B
como de costume, ou como qualquer outro caractere distinto (especifique). - Uma sequência para a parte inteira e outra para a parte fracionária.
- Duas matrizes / listas, uma para cada parte, contendo números de
0
até35
como dígitos.
As únicas restrições são que as partes inteiras e fracionárias possam ser separadas (separador adequado) e usar o mesmo formato (por exemplo, não [5, 11]
para a lista que representa a parte inteira e ['5', 'B']
para a lista que representa a parte fracionária).
Regras adicionais
- Programas ou funções são permitidos, em qualquer linguagem de programação . As brechas padrão são proibidas.
- O menor código em bytes vence.
Casos de teste
Saída é mostrada como uma string com dígitos 0
, ..., 9
, A
, ..., Z
, utilizando .
como separador decimal.
x, b, n -> output(s)
4.5, 10, 5 -> 4.50000 or 4.49999
42, 13, 1 -> 33.0 or 32.C
3.141592653589793, 3, 8 -> 10.01021101
3.141592653589793, 5, 10 -> 3.0323221430
1.234, 16, 12 -> 1.3BE76C8B4395
10.5, 2, 8 -> 1010.10000000 or 1010.01111111
10.5, 3, 8 -> 101.11111111
6.5817645, 20, 10 -> 6.BCE2680000 or 6.BCE267JJJJ
0.367879441171442, 25, 10 -> 0.94N2MGH7G8
12944892982609, 29, 9 -> PPCGROCKS.000000000
42, 13, 1
podemos ter em 33
vez de 33.0
?
n
dígitos decimais