Concatenar dois números inteiros no Mathematica 7
-
09-09-2020 - |
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
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[{##}]] &