Пример #1
0
        public static BigInt Multiply(BigInt number1, BigInt number2)
        {
            BigInt result = new BigInt("0", false);

            int length = number1.number.Length;

            if (number1.number.Length < number2.number.Length)
            {
                length = number2.number.Length;
            }

            StringBuilder sbNum1 = new StringBuilder();

            for (int i = 0; i < length - number1.Number.Length; i++)
            {
                sbNum1.Append("0");
            }
            sbNum1.Append(number1.number);

            StringBuilder sbNum2 = new StringBuilder();

            for (int i = 0; i < length - number2.Number.Length; i++)
            {
                sbNum2.Append("0");
            }
            sbNum2.Append(number2.number);

            for (int i = 0; i < length; i++)
            {
                StringBuilder sb = new StringBuilder();
                sb.Clear();

                int a = int.Parse(sbNum1[length - 1 - i].ToString());
                sb.Append(sbNum2.ToString());

                for (int j = 0; j < i; j++)
                {
                    sb.Append("0");
                }

                for (int k = 0; k < a; k++)
                {
                    result = Sum(result, new BigInt(sb.ToString(), false));
                }
            }

            if (number1.IsNegative != number2.IsNegative)
            {
                result.IsNegative = true;
            }
            result = BigInt.TrimZeros(result);
            return(result);
        }