Вопрос

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

cc[123, 4567] >> 1234567

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

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

Это было полезно?

Решение

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

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

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

ToExpression@StringJoin@IntegerString@#&
.

, который основан на генеракодицетагкоде, будучи генеракодицетагкодом.

Другие советы

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

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

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

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

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

FromDigits[Join @@ IntegerDigits[{##}]] & 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top