public static BigInteger Multiply(BigInteger n1, BigInteger n2) { bool sign1 = true; bool sign2 = true; if (n1.CompareAbs(n2) < 0) { return(Multiply(n2, n1)); } BigInteger mult = new BigInteger(); SinglyLinkedList <int> list2 = new SinglyLinkedList <int>(); if (!n1.sign) { n1.sign = true; sign1 = false; } if (!n2.sign) { n2.sign = true; sign2 = false; } while (!n2.list.IsEmpty()) { int a = list2.Size(); BigInteger simple = MultSimple(n1, n2.list.First()); while (a > 0) { simple.list.AddFirst(0); a--; } mult = Add(simple, mult); list2.AddLast(n2.list.RemoveFirst()); } mult.Trim(); mult.sign = !(sign1 ^ sign2); n1.sign = sign1; n2.sign = sign2; return(mult); }