对孤立的arraylist元素执行乘法运算

时间:2012-02-04 00:01:19

标签: java algorithm math arraylist multiplication

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

问题:

- 使用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,.............],它们可以代表一个数万亿的巨大数字等等。

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
}