El sistema de numeración factorial , también llamado factoradic, es un sistema mixto de números radix. Los factoriales determinan el valor posicional de un número.
En este sistema, el dígito más a la derecha puede ser 0 o 1, el segundo dígito a la derecha puede ser 0, 1 o 2, y así sucesivamente. Esto significa que un nnúmero factoradic de un dígito puede tener un valor máximo de (n + 1)!.
Por ejemplo, para convertir el número factoradic 24201a decimal, haría esto:
2 * 5! = 240
4 * 4! = 96
2 * 3! = 12
0 * 2! = 0
1 * 1! = 1
240 + 96 + 12 + 0 + 1 = 349
Por lo tanto, el número factoradic 24201es 349base 10.
Para convertir un número decimal (con 349un ejemplo) en un número factoradic, debe hacer esto:
Tome el factorial más grande menor que el número. En este caso es 120, o 5!.
349 / 5! = 2 r 109
109 / 4! = 4 r 13
13 / 3! = 2 r 1
1 / 2! = 0 r 1
1 / 1! = 1 r 0
Por lo tanto, 349base 10es el número factoradic 24201.
Su desafío es crear el programa o la función más corta que convierta un número de entrada a la otra base.
La entrada será una representación de cadena de un entero no negativo. Un número factoradic estará precedido por un !(por ejemplo !24201), mientras que un número decimal no estará precedido por nada. Puede suponer que la entrada máxima será 10! - 1- 3628799en decimal y 987654321en factoradic. Esto significa que las letras no aparecerán en una entrada / salida factoradic.
El programa no necesita anteponer !a una salida factoradic, y puede generar una cadena o un entero. La entrada puede estar en cualquier formato razonable.
Casos de prueba:
Input: 1234
Output: 141120
Input: 746
Output: 101010
Input: !54321
Output: 719
Input: !30311
Output: 381
⍴⍵∩'!'con'!'∊⍵guardar un carácter.