Объединить два целых числа в Mathematica 7 - PullRequest
9 голосов
/ 23 мая 2011

Какой самый эффективный способ объединить два натуральных числа в Mathematica 7?

cc[123, 4567] >> 1234567

А как насчет более двух?

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

Ответы [ 2 ]

9 голосов
/ 23 мая 2011

Это будет немного быстрее для многих целых чисел, чем ваше последнее решение:

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

Более краткая альтернатива - принять один аргумент, предполагая, что это список, а не последовательность изчисла для объединения:

ToExpression@StringJoin@IntegerString@#&

, который основан на IntegerString, являющемся Listable.

3 голосов
/ 23 мая 2011

Это работает правильно только для коротких целых чисел, потому что вывод должен быть размером машины, но это самый быстрый, который я нашел:

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

Для более длинных целых чисел самое быстрое, что я мог найти:

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

Для объединения многих целых чисел следующее было быстрее, чем Fold на приведенном выше:

FromDigits[Join @@ IntegerDigits[{##}]] & 
...