2012-04-15 11 views
3

私には宿題のためのアイデアが必要です。リストの各ノードは、1桁の数字を表し2つの数字を掛け合わせた数字の2つのリンクされたリストで表される

typedef struct listNode { 
    int* dataPtr; 
    struct listNode* next; 
} ListNode; 

typedef struct list { 
    ListNode* head; 
    ListNode* tail; 
} List; 

: 次の定義を考えてみましょう。 各番号はリストで表されますが、逆の方法で表されます。番号の最後の桁はリストの最初のリストノードであり、番号の最初の桁はリストの最後のリストノードです。

私は他の二つのリストの合計が新しいリストを返す関数

void addNumbers(List n1, List n2, List *sum); 

を書きました。

は今、私は乗算に関数を記述する必要があります。

void multNumbers(List n1, List n2 , List* prod); 

そして、私はちょっとそれを実装する方法で立ち往生しています。それはコードについてではなく、それを行う方法です。 言うまでもなく、数値を整数に変換し、乗算し、結果をリストに変換することはできません。

ご協力いただければ幸いです。

ありがとうございました。

+1

スタートを使用して、結果に彼が数:[乗算アルゴリズム](http://en.wikipedia.org/wiki/Multiplication_algorithm)。あなたが手ですべてをやらなければならなかったとき、学校での良い昔のことを考えてください... – Anonymous

+1

もちろん、私は2つの数字を乗算する方法を知っています、それはちょうど数字が分離され、逆転されていることです。私が間違っているなら私を訂正してください。しかし、このタイプの問題は簡単ではありません。 – Catalyst

答えて

1

これは、コードの再利用のための良い練習になります。 2つのリンクされたリスト番号を追加する関数を既に作成しているので、その関数を利用して乗算を実行できますか?結局のところ、乗算は、第1の数字に第2の数字の数字の1つを繰り返して乗算し、すべての結果を加算することによって手で行うことができる。これらの線に沿って何かを試してみてください:

  • 最初を掛け、結果が含まれていますリンクリストの番号を作成し、各桁の秒数
    • の桁をゼロ
    • ループに設定します(これを行う別の関数を書く必要があります;もしあなたが加算関数を書くことができれば、これはあまりにも難しくありません)
    • 結果の最後にゼロを付け加えて、数字が遠くにシフトするようにします十分に左に
    • このページでaddNumbers()
関連する問題