Concaténer deux entiers dans Mathematica 7
-
09-09-2020 - |
Question
Quelle est la manière la plus efficace de concaténer deux entiers positifs dans Mathematica 7 ?
cc[123, 4567]
>> 1234567
Et plus de deux ?
cc[123, 4, 567, 89]
>> 123456789
La solution
Ce sera légèrement plus rapide pour de nombreux entiers que votre dernière solution :
ToExpression[StringJoin @@ Map[IntegerString, {##}]] &
Une alternative plus concise consiste à accepter un seul argument, en supposant qu'il s'agit d'une liste, plutôt que d'une séquence, de nombres à concaténer :
ToExpression@StringJoin@IntegerString@#&
qui est basé sur IntegerString
être Listable
.
Autres conseils
Cela ne fonctionne correctement que pour les entiers courts car la sortie doit être de la taille d'une machine, mais c'est la plus rapide que j'ai trouvée :
Compile[{{a, _Integer}, {b, _Integer}},
b + a 10^Floor[1 + Log[10, b]]
]
Pour les entiers plus longs, le plus rapide que j'ai pu trouver est :
FromDigits[{##}, 10^IntegerLength@#2] &
Pour concaténer plusieurs entiers, ce qui suit était plus rapide que Fold
sur celui du dessus :
FromDigits[Join @@ IntegerDigits[{##}]] &