-1

我需要在两个链表中存储两个非常大的数字(字符串,因为它们不适合 int),添加它们然后显示结果(同样是一个字符串)。

我可以将数字直接存储到列表中。

312312可以存储为2->1->3->2->1->3(实际数字会很长)

111119可以存储为9->1->1->1->1->1

然后我可以添加它们

11->2->4->3->2->4

通常我可以做11*10^0 + 2*10^1 +...+ 4*10^5并得到423431但所有这些运算(乘法、加法和求幂)将再次是整数运算,因为实际数字是将非常大,int 或 long 将不支持操作。最终结果必须是一个字符串。

所以我需要一种不使用 int 将 11->2->4->3->2->4 转换为 423431 的方法。另外,我不能使用 BigInteger。谁能帮我?

4

2 回答 2

1

想想你将如何在纸上手工完成。如果一对数字的总和大于 9,则记下进位数字 1,然后将其添加到下一对数字的总和中。

在计算机程序中,您可以为此使用局部变量:将第一个数字和最后一个数字的数字相加,以及前面的进位,如果总和大于.. 将进位设置为 1,否则将进位设置为 0,继续下一对...

于 2013-09-27T06:44:57.947 回答
1

好吧,您需要做的第一件事是实施进位。

对于每个数字(即 >= 10),您需要将下一个数字增加该数字/10并将该数字设置为该数字%10

就这样11->2->...变成了1->3->...

然后实际产生字符串。

对于性能最高的选项,我建议StringBuilder.

只是append链表中的每个数字,然后只是reverse().toString()(因为你从最小的数字开始)。

于 2013-09-27T06:46:49.663 回答