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

Était-ce utile?

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[{##}]] & 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top