Pergunta

O que é a forma mais eficiente para concatenar dois números inteiros positivos no Mathematica 7?

cc[123, 4567] >> 1234567

O que mais do que dois?

cc[123, 4, 567, 89] >> 123456789

Foi útil?

Solução

Este será um pouco mais rápido para muitos números inteiros, que o seu último solução:

ToExpression[StringJoin @@ Map[IntegerString, {##}]] &

Uma forma mais concisa alternativa é aceitar um único argumento, supondo que seja uma lista, em vez de uma seqüência de números para concatenar:

ToExpression@StringJoin@IntegerString@#&

qual é baseado no IntegerString sendo Listable.

Outras dicas

Isso só funciona corretamente para que inteiros curtos porque a saída deve ser do tamanho da máquina, mas é a mais rápida que eu encontrei:

Compile[{{a, _Integer}, {b, _Integer}}, 
  b + a 10^Floor[1 + Log[10, b]]
]

Para mais inteiros, o mais rápido que eu poderia encontrar é:

FromDigits[{##}, 10^IntegerLength@#2] &

Para a concatenação de vários números inteiros, o seguinte foi mais rápido do que Fold em um acima:

FromDigits[Join @@ IntegerDigits[{##}]] & 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top