Объединение двух целых чисел в Mathematica 7
-
09-09-2020 - |
Вопрос
Каков наиболее эффективный способ объединения двух положительных целых чисел в системе 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[{##}]] &