0

2 つの個別にリンクされたリストに格納されている数字を乗算しようとしています。しかし、私のアルゴリズムは非常に複雑になりました。小学校でやったようにかけ算をしています。リストの 1 つの値を取得し、すべての数値をカバーするまで、他のリストの各値を乗算します。問題は、掛け算の最終結果を得るためにこれらの数値を最後に加算しなければならないことです。ここで問題が発生します。任意の数の要素を相互に乗算し、最後に結果を合計できる方法を見つける必要があります。これまでのところ、私のコードは次のようになっています

public SingleyLinkedList Multiply(SingleyLinkedList list1, 
                                  SingleyLinkedList list2)
        {
        SingleyLinkedList multiplyList = new SingleyLinkedList();
        SingleyLinkedList tempList1 = new SingleyLinkedList();
        SingleyLinkedList tempList2 = new SingleyLinkedList();

        for (int j = 0; j < list2.Size(); j++)
        {
            int carry = 0;
            int B = Convert.ToInt32(list2.GetValue(j));

            for (int k = 0; k < list1.Size(); k++)
            {

                int A = Convert.ToInt32(list1.GetValue(k));

                if (k == list1.Size()-1)
                {
                    int multiply = ((A * B) + carry);
                    multiplyList.InsertAtFront(multiply);
                    carry = 0;
                }
                if (k < list1.Size()-1)
                {
                    int multiply = ((A * B) + carry) % 10;
                    multiplyList.InsertAtFront(multiply);
                    carry = 0;
                }
                carry = (int)((A * B) / 10);
            }
        }
      //return multiplyList;

        for ( int t = 0 ; t < list2.Size() ; t++)
        {

            for (int n = 0; n < list1.Size(); n++)
            {
                int val = Convert.ToInt32(multiplyList.GetValue(n));
                tempList1.InsertAtFront(val);
            }

            // adding zero to take care of 10th                
            for (int m = 0; m < list2.Size() - 1; m++)
            {
                tempList1.InsertAtFront(0);
            }

        }

        return tempList1;`

この段階の後、作成した Add メソッドに値を渡す必要があります。このメソッドは、2 つのリンクされたリストをパラメーターとして取り、加算を行います。このプロセスを必要な数だけ実行できる必要があります。任意の提案、または乗算を行うためのより良い方法を知っている場合は?

4

2 に答える 2

0

この Java コードを複製したい場合があります。

import java.util.LinkedList;
import java.util.ListIterator;

public class MultiplyTwoLinkedLists {

    public static void main(String[] args) {

        LinkedList<Integer> number1 = new LinkedList<Integer>();
        LinkedList<Integer> number2 = new LinkedList<Integer>();
        number1.addFirst(1);
        number1.addFirst(2);

        number2.addFirst(1);
        number2.addFirst(2);

        multiply(number1, number2);
    }

    public static int multiply(LinkedList<Integer> n1, LinkedList<Integer> n2){

        int placeValue1 = 1;
        int sum=0;
        for(int digit1 : n1){
            int placeValue2 = 1;
            for(int digit2 : n2){
                sum+=((digit1*placeValue1) * (digit2*placeValue2));
                placeValue2=placeValue2*10;
            }
            placeValue1=placeValue1*10;
        }
        System.out.println(sum);
        return 1;
    }


}
于 2013-10-29T19:32:12.713 に答える
0

これは、単純な問題の不必要に複雑な実装のように見えます。宿題の匂いがする。

最後に値を合計するのに問題があると言いました(長い乗算の場合のように.

sumメソッドを実装し、リストを使用することをお勧めしsumます。

合計リストを 0 に初期化し、乗算プロセスを繰り返すたびに、sumメソッドを使用して新しいリストをリストに追加しますsum


または、乗算の最初の部分にリストのリストを作成し、最後にそれらのリストをすべて合計することもできます。

この実装にはもう少し多くのメモリが必要ですが、視覚化も少し簡単になります。

于 2012-12-03T19:46:02.957 に答える