Пример #1
0
        //IComparable nonstatic implementation
        public int CompareTo(object obj)
        {
            LongInt snd = (LongInt)obj;

            if (digits.Count > snd.digits.Count)
            {
                return(1);
            }
            else if (digits.Count < snd.digits.Count)
            {
                return(-1);
            }
            else
            {
                int maxlenght = Math.Max(digits.Count, snd.digits.Count);
                for (int i = maxlenght - 1; i >= 0; i--)
                {
                    int aval = i >= digits.Count ? 0 : digits[i];
                    int bval = i >= snd.digits.Count ? 0 : snd.digits[i];
                    if (aval > bval)
                    {
                        return(1);
                    }
                    else if (aval < bval)
                    {
                        return(-1);
                    }
                }
                return(0);
            }
        }
Пример #2
0
        //ADDITION
        public static LongInt operator +(LongInt a, LongInt b)
        {
            int     l   = a.digits.Count;
            int     r   = b.digits.Count;
            LongInt res = new LongInt();
            //Lenght of the result
            int length = Math.Max(l, r) + 1;

            res.digits.Clear();
            int carry = 0;

            for (int i = 0; i < length; i++)
            {
                int adigit = i >= a.digits.Count ? 0 : a.digits[i];
                int bdigit = i >= b.digits.Count ? 0 : b.digits[i];
                res.digits.Add(bdigit + adigit + carry); // суммируем последние разряды чисел
                carry          = (res.digits[i] / rank); // если есть разряд для переноса, переносим его в следующий разряд
                res.digits[i] %= rank;                   // если есть разряд для переноса он отсекается
            }
            return(res);
        }
Пример #3
0
        static void StaticManualTest(LongInt n1, LongInt n2)
        {
            WriteLine("----------");
            WriteLine($"n1 = {n1}, n2 = {n2}");
            WriteLine($"{n1} + {n2} = {n1 + n2}");
            WriteLine($"{n1} - {n2} = {n1 - n2}");
            WriteLine($"{n1} * {n2} = {n1 * n2}");
            WriteLine($"{n1} / {n2} = {n1 / n2}");
            WriteLine($"{n1} % {n2} = {n1 % n2}");
            WriteLine($"{n1} > {n2} = {n1 > n2}");
            WriteLine($"{n1} < {n2} = {n1 < n2}");
            WriteLine($"{n1} >= {n2} = {n1 >= n2}");
            WriteLine($"{n1} <= {n2} = {n1 <= n2}");
            WriteLine($"{n1} == {n2} = {n1 == n2}");
            WriteLine($"{n1} != {n2} = {n1 != n2}");

            LongInt num = 1;

            for (int i = 0; i < 200; i++)
            {
                num *= int.MaxValue;
            }
            WriteLine($"Big Number {num}");
        }