2012-04-15 43 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()