对隔离的arraylist元素执行算术运算

时间:2012-02-03 21:12:11

标签: java algorithm math arraylist addition

我正在寻找一个明确的解释来解决我的问题(不寻找代码),但如果有一些代码有助于解释自己,那么请做..谢谢:)

问题:

- 使用Java -Main类向用户询问2个整数输入,然后将它们放入2个类型为整数的arraylists中。每个数字都被分解并存储在它自己的索引中,因此它就是它自己的“元素”,可以这么说。

例如,现在使用我的代码,它就是这样的:

“请输入一个整数:”

688

“请输入另一个整数:”

349


现在,在内部,我已将输入存储为2个arraylists,如下所示:

ArrayList1:[6,8,8]

ArrayList2:[3,4,9]

现在,假设我想执行一些添加,例如ArrayList1 + ArrayList2。

我可能会继续创建一个临时的“结果”arraylist,然后在我的计算完成时将该答案移到arraylist1上。

但我遇到麻烦的部分,正在提出一个系统的明确方法来将arraylists加在一起。请记住,此示例使用一个arraylist,它表示长度为3的整数,但这可能是任何东西。例如,我可以有一个带有50个元素的arraylist,例如[2,4,4,3,7,3,6,3,.............],它们可以代表一个数万亿的巨大数字等等。

4 个答案:

答案 0 :(得分:4)

想想你将如何加入小学。你可以通过排列这样的数字来启动:

    1  3  7
+      4  5
-----------

然后,你要添加最后两位数来获得

    1  3  7
+      4  5
-----------
          2

你有一个1的随身携带。然后你添加接下来的两位数字,加上随身携带:

    1  3  7
+      4  5
-----------
       8  2

现在你已经携带0,所以你可以添加最后一位数和缺少的数字来获得

    1  3  7
+      4  5
-----------
    1  8  2

一般模式如下所示:从每个数组的最后一位开始,将最后两个数字加在一起得到一个总和和一个进位。将和的单位数字写入结果数组,然后将进位传播到下一列。然后将该列中的值(加上进位)一起添加,并在数字上重复此过程。一旦你用尽其中一个数字中的所有数字,继续做总和,但假装有一个0作为缺失的数字。处理完所有数字后,您将获得所需的答案。

希望这有帮助!

答案 1 :(得分:1)

如果向后存储数字,你的数组将更容易操作,因为它们的数字,数十,数百等将彼此对齐(即它们将位于相同的索引处)。

然后你可以按照他们在小学教学的相同方式实现添加:逐个遍历数字数组,添加它们,检查数字溢出(>=10),并注意进位标志(结果数字为(a+b) % 10,进位标志为(a+b)/10)。如果在完成加法后进位标志不为零,并且两侧都没有剩余的数字,则将进位标志添加到结果数组的末尾。

唯一剩下的问题是显示列表。你可以通过简单的后向循环来完成它。

P.S。如果您想根据已知的工作情况仔细检查您的覆盖物计算,请使用BigInteger计算预期结果,并检查您的结果。

答案 2 :(得分:0)

将arraylist视为存储容器。它可以保存其中“整数”类型的项目,但它的类型仍然是“存储容器”。您无法对这些类型的对象执行数学运算 - 仅限于其内容。

答案 3 :(得分:0)

你有

list1
list2

需要一个额外的变量

int carry

然后

1 do add(0,0) on short list, so that at the end two lists have same length.

2 reversely loop the two list. 
  sum=(carry+(e1+e2))
  set e1 (list1 element) = sum%10, 
  carry = sum/10, 
  till the first element.
3 if carry==1, list1.add(0,1)

now list1 stores the result.

注意,step1不是必须的。它可以通过检查短名单的长度来循环完成。