예제 #1
0
        public BigInt MultOnDigit(int n) // умножение на цифру 0, ...,9
        {
            var sign = n;

            n = Math.Abs(n);
            var result = new BigInt('+', new List <int>());
            var t = 0; int r;

            for (var i = this.number.Count - 1; i >= 0; i--)
            {
                r = this.number[i] * n + t;
                {
                    t  = r / 10;
                    r %= 10;
                }
                result.SetDigit(i, r);
            }
            if (t != 0)
            {
                result.number.Insert(0, t);
            }
            result.DeleteNuls();
            if ((this.sign == '+' && sign > 0) || (this.sign == '-' && sign < 0))
            {
                return(result);
            }
            else
            {
                return(-result);
            }
        }
예제 #2
0
        private static BigInt Reduce(BigInt a, BigInt b)//вычитает из большего меньшее два бигинта
        {
            if (a == b)
            {
                return(Zero);
            }
            if (b.sign == '-')
            {
                return(Addition(a, b));
            }
            a.DeleteNuls(); b.DeleteNuls();
            b.EqualizeTheDigits(a.number.Count);
            var res = new BigInt();
            var num1 = new List <int>(a.number); var num2 = new List <int>(b.number);

            for (var i = a.number.Count - 1; i >= 0; i--)
            {
                var r = num1[i] - num2[i];
                if (r < 0)
                {
                    num1[i - 1]--;
                    r = 10 + r;
                }
                res.SetDigit(i, r);
            }
            res.DeleteNuls();
            return(res);
        }