我试图将存储在两个单链表中的数字相乘。但是,我的算法变得非常复杂。我正在按照我们在小学的方式进行增殖。获取其中一个列表的值并将其乘以另一个列表的每个值,直到我们覆盖所有数字。问题是我必须在最后添加这些数字以获得乘法的最终结果,这就是我遇到麻烦的地方。我必须找到一种方法,能够将任意数量的元素相互叠加,并能够在最后添加结果。到目前为止,我的代码就像这样
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方法,该方法将两个链接列表作为参数并进行添加。我需要能够为我想要的数量做这个过程。 任何建议或者你是否知道有任何更好的方法来进行乘法运算?
答案 0 :(得分:0)
这看起来像是一个简单问题的必然复杂的暗示。闻起来像家庭作业。
你提到你在最后添加值时遇到了麻烦(就像你在长乘法中那样。
我建议实施sum
方法,并使用sum
列表。
将总和列表初始化为0,然后在乘法过程的每次迭代后,使用sum
方法将新列表添加到sum
列表。
或者,你可以在乘法的第一部分有一个列表列表,然后在最后将所有这些列表加在一起。
此实现将占用更多内存,但可视化也更容易一些。
答案 1 :(得分: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;
}
}