使用链接列表和执行操作表示大量数字

时间:2013-09-27 06:30:20

标签: java linked-list

我需要在两个链表中存储两个非常大的数字(字符串,因为它们不适合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不支持运算。最终结果必须是一个字符串。

所以我需要一种方法将11-> 2-> 4-> 3-> 2-> 4转换成423431而不使用int。另外,我不能使用BigInteger。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

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

在计算机程序中,你可以使用一个局部变量:添加来自前一个和后一个数字的数字以及前面的进位,如果sum大于.. set carry为1,否则设置进位为0,继续下一对......

答案 1 :(得分:1)

嗯,首先要做的是实施进位。

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

因此11->2->...变为1->3->...

然后实际生成字符串。

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

链接列表中的每个数字只需append,然后只有reverse().toString()(因为您从最小的数字开始)。