2011-05-23 48 views

回答

8

這將是稍快了許多整數,比你最後的解決方案:

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

更簡潔的方法是接受一個參數,假設它是一個列表,而不是數字序列,來連接:

[email protected]@[email protected]#& 

其基於IntegerStringListable

3

這只是正常工作的短整型,因爲輸出必須是機器的大小,但它是我找到的最快:

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

對於較長的整數,最快我可以找到是:

FromDigits[{##}, 10^[email protected]#2] & 

對於連接許多整數,以下速度比Fold快以上:

FromDigits[Join @@ IntegerDigits[{##}]] & 
+0

在我的計時中,在編譯函數中使用'IntegerLength [b]'比使用'Floor [...]快20倍「。 – 2011-05-24 08:33:14

+0

@Sjoerd,是在版本8? – 2011-05-24 09:03:44

+0

@ Mr.Wizard'Fold'的速度很慢,因爲它最終會在較長的數組中乘以較大的整數。使用分而治之,你可以得到2倍的加速:'Clear [cc4]; cc4 [{i_}]:= i; cc4 [{i1_,i2_}]:= FromDigits [{i1,i2},10^IntegerLength [i2]]; cc4 [x_List]:= With [{k = Quotient [Length [x] + 1,2]},cc4 [{cc4 [Take [x,k]],cc4 [Drop [x,k]]}]]'' 。 – Sasha 2011-05-24 12:43:30