2012-02-04 47 views
0

我找了一个明确的解释我的问题(不找代码),但如果一些代码有助于解释自己,那么请你..执行乘法谢谢:)孤立的ArrayList元素

问:

- 使用Java的

- 主类要求用户2个整数输入,然后把它们分成2周的ArrayList,整数类型。每个数字都被分解并存储在自己的索引中,所以它是它自己的“元素”,可以这么说。

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

“请输入一个整数:”

“请输入另一个整数:”

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

ArrayList1:[6,8,8]

ArrayList2:[3,4]

现在,让我们说,我想执行一些mutliplication,如ArrayList1 * ArrayList2。

我可能会继续并创建一个临时“结果”数组列表,然后在计算完成时将该答案移至arraylist1。

但是,我遇到了麻烦的部分,正在想出一个系统清晰的方法来将数组列表放在一起。请记住,这个例子使用了分别代表长度3和2的整数列表,但这可能是任何东西。例如,我可以有一个包含50个元素的数组列表,例如[2,4,4,3,7,3,6,3,.............],它们可以表示在万亿巨大数量等

+0

如果BigInteger允许/可用/相关,则可能是更有效的方法。 – 2012-02-04 01:52:22

+0

够公平的。从上下文来看,不确定它是否是一个练习。 – 2012-02-04 03:37:36

+1

如果您的列表[8,8,6]和[4,3]使得所表示的值是元素乘以10的指数的总和 - 否则无论您必须预先计算结果中的数字位数,或者如果需要另一个位置,则必须移动所有数字。 – 2012-02-04 15:42:12

回答

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 
} 
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

这听起来像是你最终想要在你的例子中扩大:688 * 34.为了完成你正在使用的结构,ArrayList将使用2 for循环完成,每个列表一个(for for循环因为它是一个可迭代的对象)。将第一个阵列中的每个元素乘以10^i次方,给出(8 * 10^0)+(8 * 10^1)+(6 * 10^2)= 688。整数在第二个列表中并乘以10^j,如同在第一个循环中完成的。通过循环保持每次迭代的运行计数器,以便在发生每次乘法运算时对其进行求和。