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

¿Fue útil?

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[{##}]] & 

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top