Concatenar dos enteros en Mathematica 7
-
09-09-2020 - |
Pregunta
¿Cuál es la forma más eficiente de concatenar dos enteros positivos en Mathematica 7?
cc[123, 4567]
>> 1234567
¿Qué pasa con más de dos?
cc[123, 4, 567, 89]
>> 123456789
Solución
Esto será un poco más rápido para muchos enteros, que su última solución:
ToExpression[StringJoin @@ Map[IntegerString, {##}]] &
Una alternativa más concisa es aceptar un solo argumento, suponiendo que sea una lista, en lugar de una secuencia, de números para concatenar:
ToExpression@StringJoin@IntegerString@#&
que se basa en IntegerString
siendo Listable
.
Otros consejos
Esto solo funciona correctamente para enteros cortos porque la salida debe ser de tamaño de la máquina, pero es el más rápido que encontré:
Compile[{{a, _Integer}, {b, _Integer}},
b + a 10^Floor[1 + Log[10, b]]
]
Para enteros más largos, el más rápido que pude encontrar es:
FromDigits[{##}, 10^IntegerLength@#2] &
Para concatenar muchos enteros, lo siguiente fue más rápido que Fold
en el anterior:
FromDigits[Join @@ IntegerDigits[{##}]] &