我正在寻找一个明确的解释我的问题(不寻找代码),但如果一些代码有助于解释自己,那么请做..谢谢:)
问题:
- 使用Java
-Main类向用户询问2个整数输入,然后将它们放入2个类型为整数的arraylists中。每个数字都被分解并存储在它自己的索引中,因此它就是它自己的“元素”,可以这么说。
例如,现在使用我的代码,它就是这样的:
“请输入一个整数:”
688
“请输入另一个整数:”
34
现在,在内部,我已将输入存储为2个arraylists,如下所示:
ArrayList1:[6,8,8]
ArrayList2:[3,4]
现在,假设我想执行一些mutliplication,例如ArrayList1 * ArrayList2。
我可能会继续创建一个临时的“结果”arraylist,然后在我的计算完成时将该答案移到arraylist1上。
但是我遇到麻烦的那部分,正在提出一种系统的明确方法来将arraylists加在一起。请记住,此示例使用的arraylist分别表示长度为3和2的整数,但这可能是任何内容。例如,我可以有一个带有50个元素的arraylist,例如[2,4,4,3,7,3,6,3,.............],它们可以代表一个数万亿的巨大数字等等。
答案 0 :(得分:2)
除非您使用快速算法,例如Karatsuba multiplication,否则如您所述,将两个数相乘的算法是您在小学学习的简单O(n ^ 2)算法 - 乘以第二个列表的每个数字根据需要携带第一个清单的每个数字。所以,对于你的第一个例子,这个算法给你688 x 34 = [6 * 4,8 * 4,8 * 4] + [6 * 3,8 * 3,8 * 3,0] = [24,32, 32] + [18,24,24,0],携带后变为 [2,7,5,2] + [2,0,6,4,0] = [2,3,3,9,2]。
答案 1 :(得分:1)
听起来你想最终成倍增加,在你的例子中:688 * 34.要使用你正在使用的结构执行此操作,ArrayList将使用2 for循环完成,每个列表一个(由于循环增强)它是一个可迭代的对象)。从第一个数组中取出每个元素将乘以10 ^ i的幂,给你(8 * 10 ^ 0)+(8 * 10 ^ 1)+(6 * 10 ^ 2)= 688.每个元素将乘以每个元素第二个列表中的整数乘以10 ^ j,如第一个循环中所做的那样。通过循环保持每次迭代的运行计数器,以便在发生时对每次乘法求和。
答案 2 :(得分:0)
伪代码:
subtotal=0
iterate AL1 on index i (where i goes from zero to AL1.length()-1)
{
iterate AL2 on index j (where j goes from zero to AL2.length()-1))
{
increment subtotal by AL2[AL2.length-j]*10^j * AL1[AL1.length-i]*10^i
increment j
}
increment i
}