FromDigits 发生了什么?

What's happening with FromDigits?

我以为我知道 FromDigits 的工作原理,但它现在正在做一些疯狂的事情。

n[[990;;]]
FromDigits[n[[990;;]]]

输出:

{9, 50, 0, 50, 1, 50, 2, 50, 3, 50, 4, 50, 5, 50, 6, 50, 7, 50, 8, 50, 9}
1405060708091011121309

而不是 950050150...

怎么回事?

文档说

FromDigits : constructs an integer from the list of its decimal digits.

因此数组中的每个数字都必须小于 10(十进制数字)才能进行简单的串联。

比基数大的数字是"carried":例如

FromDigits[{7, 11, 0, 0, 0, 122}] will give 810122

有关详细信息,请访问 http://reference.wolfram.com/language/ref/FromDigits.html

我想 "string hacking" 可能就是您要的。这个

myn = {9, 50, 0, 50, 1, 50, 2, 50, 3, 50, 4, 50, 5, 50, 6, 50, 7, 50, 8, 50, 9};
ToExpression[StringReplace[ToString[myn], ", " -> ""]][[1]]

给你这个整数

9500501502503504505506507508509

这会将您的列表变成一个字符串,将每个逗号 space 分隔符替换为空,将生成的字符串变回整数并丢弃现在不需要的大括号。

其他几种方式..

     FromDigits@Flatten@IntegerDigits@
        {9, 50, 0, 50, 1, 50, 2, 50, 3, 50, 4, 50, 5, 50, 6, 50, 7, 50, 8, 50, 9}

9500501502503504505506507508509

     (ToString /@ # // StringJoin // ToExpression) &@
        {9, 50, 0, 50, 1, 50, 2, 50, 3, 50, 4, 50, 5, 50, 6, 50, 7, 50, 8, 50, 9} 

9500501502503504505506507508509