我正在寻找一个明确的解释来解决我的问题(不寻找代码),但如果有一些代码有助于解释自己,那么请做..谢谢:)
问题:
- 使用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,.............],它们可以代表一个数万亿的巨大数字等等。
答案 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不是必须的。它可以通过检查短名单的长度来循环完成。