Beispiel #1
0
        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);
        }