在Mathematica 7中連接兩個正整數的最有效方法是什麼?在Mathematica中連接兩個整數7
cc[123, 4567]
>>1234567
什麼兩個以上的?
cc[123, 4, 567, 89]
>>123456789
在Mathematica 7中連接兩個正整數的最有效方法是什麼?在Mathematica中連接兩個整數7
cc[123, 4567]
>>1234567
什麼兩個以上的?
cc[123, 4, 567, 89]
>>123456789
這將是稍快了許多整數,比你最後的解決方案:
ToExpression[StringJoin @@ Map[IntegerString, {##}]] &
更簡潔的方法是接受一個參數,假設它是一個列表,而不是數字序列,來連接:
[email protected]@[email protected]#&
其基於IntegerString
是Listable
。
這只是正常工作的短整型,因爲輸出必須是機器的大小,但它是我找到的最快:
Compile[{{a, _Integer}, {b, _Integer}},
b + a 10^Floor[1 + Log[10, b]]
]
對於較長的整數,最快我可以找到是:
FromDigits[{##}, 10^[email protected]#2] &
對於連接許多整數,以下速度比Fold
快以上:
FromDigits[Join @@ IntegerDigits[{##}]] &
在我的計時中,在編譯函數中使用'IntegerLength [b]'比使用'Floor [...]快20倍「。 – 2011-05-24 08:33:14
@Sjoerd,是在版本8? – 2011-05-24 09:03:44
@ 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