我不认为有一个数学属性可以导致有效的通用捷径。XOR 适用于 base 2 的原因是因为 XOR 具有方便的特性,即与进位丢弃相加。
一个简单的递归函数可以应用该算法,例如利用 Scala 的 BigInt 类进行基本转换:
def sums(radix: Int, digits: List[List[String]]): String =
if(digits exists { _.nonEmpty }) // there's at least 1 bit left to add
(digits.flatMap { _.headOption } // take the 1st bit of all numbers
.map { BigInt(_, radix) } // convert to int representation
.sum
.toInt % radix // modulo by base
).toString +
sums(radix, digits map { _.drop(1) }) // do next most significant bit
else
"" // base case: no digits left to add
def sum(radix: Int, ns: List[Int]): Int =
BigInt(
sums(
radix,
ns // use BigInt to convert from int representation to string
.map { BigInt(_) }
.map { _.toString(radix).split("").drop(1).toList.reverse }
)
.reverse,
radix
).toInt
scala> sum(3, List(4,4,4,2))
res0: Int = 2
您的问题被标记为“性能”,但没有列出任何关于内存或运行时的额外限制来告知改进的方法。