Domanda

Qual è il modo più efficace per concatenare due numeri interi positivi in Mathematica 7?

cc[123, 4567] >> 1234567

E più di due?

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

È stato utile?

Soluzione

Questo sarà leggermente più veloce per molti numeri interi, della tua ultima soluzione:

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

Un'alternativa più concisa è quella di accettare un singolo argomento, supponendo che sia una lista, piuttosto che una sequenza, di numeri da concatenare:

ToExpression@StringJoin@IntegerString@#&
.

che si basa su IntegerString Listable.

Altri suggerimenti

funziona correttamente correttamente per brevi numeri interi perché l'uscita deve essere dimensione della macchina, ma è il più veloce che ho trovato:

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

Per numeri interi più lunghi, il più veloce che potrei trovare è:

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

Per concatenare molti numeri interi, quanto segue era più veloce del Fold su quello sopra:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top