2012-04-15 71 views
3

我需要一些關於作業分配的想法。 考慮以下定義:乘以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 2012-04-15 22:35:04

+1

當然,我知道如何繁殖2個數字,它只是將數字分開並顛倒過來。糾正我,如果我錯了,但這種類型的問題不是微不足道的。 – Catalyst 2012-04-15 22:39:39

回答

1

這將是一個很好的代碼重用練習。既然您已經創建了添加兩個鏈接列表號的函數,您是否可以利用該函數來執行乘法的(部分)?畢竟,乘法可以通過將第一個數字與第二個數字中的一個數字重複相乘,然後將所有結果相加來手動執行。試試沿着這些線路:

  • 創建將包含結果的鏈接列表編號,並通過第二個數字
    • 對於每個數字的位數將其設置爲零
    • 循環,乘第一(你應該寫一個單獨的函數來做到這一點;如果你設法編寫加法函數,這應該不會太難)
    • 將零追加到結果的末尾,以便數字移到很遠足夠左側
    • 加t他數的結果,使用addNumbers()