Hemos tenido algunos desafíos para la conversión de bases, pero todos parecen aplicarse a valores enteros. ¡Hagámoslo con números reales!
El reto
Entradas:
- Un número positivo real x , expresado en la base 10. Esto puede tomarse como un flotante de doble precisión o como una cadena. Para evitar problemas de precisión, se puede suponer que el número es mayor que 10 −6 y menor que 10 15 .
- Una base objetivo b . Este será un número entero de 2 a 36.
- Un número de dígitos fraccionarios n . Este será un entero del 1 al 20.
Salida: la representación de x en la base b con n dígitos fraccionarios.
Al calcular la expresión de salida, los dígitos más allá de la n -ésima se deben truncar (no redondear). Por ejemplo, x = 3.141592653589793
en base b = 3
es 10.0102110122...
, por lo que para n = 3
la salida sería 10.010
(truncamiento), no 10.011
(redondeo).
Para x y b que producen un número finito de dígitos en la parte fraccional, también se permite la representación infinita equivalente (truncada en n dígitos). Por ejemplo, 4.5
en decimal también se puede representar como 4.49999...
.
No te preocupes por los errores de coma flotante .
Formato de entrada y salida.
x se dará sin ceros a la izquierda. Si x resulta ser un número entero, puede suponer que se dará con una parte decimal cero ( 3.0
) o sin una parte decimal ( 3
).
La salida es flexible. Por ejemplo, puede ser:
- Una cadena que representa el número con un separador adecuado (punto decimal) entre partes enteras y fraccionarias. Los dígitos
11
,12
etc. (para b más allá de 10) se pueden representar como letrasA
,B
como de costumbre, o como cualquier otro carácter distinto (especifique). - Una cadena para la parte entera y otra cadena para la parte fraccionaria.
- Dos matrices / listas, una para cada parte, que contienen números de
0
a35
como dígitos.
Las únicas restricciones son que las partes enteras y fraccionarias pueden separarse (separador adecuado) y usar el mismo formato (por ejemplo, no [5, 11]
para la lista que representa la parte entera y ['5', 'B']
para la lista que representa la parte fraccionaria).
Reglas adicionales
- Se permiten programas o funciones , en cualquier lenguaje de programación . Las lagunas estándar están prohibidas.
- El código más corto en bytes gana.
Casos de prueba
Salida se muestra como una cadena con dígitos 0
, ..., 9
, A
, ..., Z
, usando .
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 tener en 33
lugar de 33.0
?
n
dígitos decimales