Beispiel #1
0
        public static LongInteger MultiplicationLongInteger(LongInteger v1, LongInteger v2)
        {
            if (v1.Values.Count < v2.Values.Count)
            {
                MultiplicationLongInteger(v2, v1);
            }

            if (v1.Equals("0") || v2.Equals("0"))
            {
                return(LongInteger.Parse("0"));
            }

            var multResult = LongInteger.Parse("0");

            var j = v2.Values.Count - 1;
            var n = 0;

            while (j >= 0)
            {
                var result = Module(v1.Clone());
                var i      = v1.Values.Count - 1;
                var hold   = 0;
                while (i >= 0)
                {
                    var res = v1.Values[i] * v2.Values[j] + hold;
                    hold             = res / Constants.Radix;
                    result.Values[i] = res % Constants.Radix;
                    i--;
                }
                if (hold != 0)
                {
                    result.Values.Insert(0, hold);
                }

                for (var k = 0; k < n; k++)
                {
                    result.Values.Add(0);
                }

                multResult = SumLongInteger(multResult, result);
                j--;
                n++;
            }

            multResult.Negative = v1.Negative != v2.Negative;
            multResult.Normalize();
            return(multResult);
        }