我试图乘以两个单独链接列表中存储的数字。但是,我的算法变得越来越复杂。我正在按照我们在小学所做的方式进行乘法运算。获取其中一个列表的价值并将其与另一个列表的每个值相乘,直到涵盖所有数字。问题是我必须在最后加上这些数字才能获得乘法的最终结果,这就是我遇到麻烦的地方。我必须找到一种方法,能够将任意数量的元素相互叠加,并能够在最后添加结果。到目前为止,我的代码是这样的两个链接列表中的数字相乘
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方法,它有两个链表作为参数,并做加法。我需要能够为我想要的数量做这个过程。 任何建议,或者如果你知道任何更好的方法来完成乘法?
你能更清楚地定义你的要求吗? –
它可以是点积,但不一定。我想用352乘以3541.我的程序创建了两个单独链接列表{1,4,5,3}和{2,5,3}。那么这些元素会逐一相乘,并创建一个{10,6,2,3,17,7,0,5,7,0,8,2}的临时列表。我必须建立从这个链表。可能有更好的方法来做到这一点,但我还不知道。 – user843681
是的,还有更好的方法来做到这一点。使用内置的乘法功能。为什么你必须使用链表? –