2012-02-04 7 views
0

私は(コードを探すのではなく)私の質問に明確な説明を求めていますが、質問:孤立したarraylist要素に乗算を実行する

は、Java

-mainクラスを-using整数型で、2つのArrayListにそれらを配置し、その後、2つの整数入力をユーザーに要求します。各桁は分割され、独自のインデックスに格納されているので、それは独自の「要素」です。例えば

、今の私のコードで、それはこのような何かを行く:

"整数を入力してください:"

は "別の整数を入力してください:"

を34

この時点で、私は内部的に入力を2つのarraylistsとして保存しました。これは次のようになります。

ArrayList1:[6、8、8]

ArrayList2:[3、4]

は今、このようArrayList1 * ArrayList2として、私はいくつかのmutliplicationを実行したいと言うことができます。

一時的な結果のarraylistを作成し、計算が完了したらarraylist1にその回答を移動します。

しかし、私が問題を抱えている部分は、arraylistsを一緒に掛ける体系的な明確な方法が登場しています。この例では長さ3と2の整数を表すarraylistを使用していますが、これは何でもかまいません。私は、例えば、[2、4、4、3、7、3、6、3、.............]のような50要素のarraylistを持つことができました。兆で膨大な数、等

+0

許可/利用可能/関連性がある場合、 'BigInteger'がこれを行うより効果的な方法かもしれません。 –

+0

十分に公正です。文脈から運動かどうかは分かりませんでした。 –

+1

あなたのリストが[8,8,6]と[4,3]の場合、表示される値が要素の合計に10を掛けたインデックスのインデックスになるようにすると、はるかに簡単になります。そうでなければ、結果の桁数を事前に計算するか、別の番号が必要な場合はすべてをシフトする必要があります。 –

答えて

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などの高速アルゴリズムを使用しない限り、あなたが記載されているように2つの数値を乗算するアルゴリズムは、単純なO(N^2)であります小学校で学んだアルゴリズム - 最初のリストの各桁で2番目のリストの各桁を掛け、必要に応じて持ち歩きます。あなたの最初の例では、このアルゴリズムは688 x 34 = [6 * 4,8 * 4,8 * 4] + [6 * 3,8 * 3,8 * 3,0] = [24,32、 0] = [2,3,3,9,2] + [18,24,24,0]となり、搬送後は [2,7,5,2] + [2,0,6,4,0] = [2,3,3,9,2 ]。

1

あなたの例では、最終的に乗算したいように思えます:688 * 34.使用している構造体でこれを行うには、2つのforループ、各リストの1つiterableオブジェクトのため)。最初の配列から各要素を取得するには、10^i累乗を掛けて、(8 * 10^0)+(8 * 10^1)+(6 * 10^2)= 688を与えます。 2番目のリストの整数で、最初のループで行われたように10^jを掛けたものです。それぞれの乗算の実行カウンタをループ内に保持して、各乗算が発生するたびに合計します。

関連する問題