Ejemplo n.º 1
0
        public static NumarMare operator *(NumarMare a, NumarMare b)
        {
            NumarMare c = new NumarMare(a.bigNum.Length + b.bigNum.Length);

            NumarMare[] intermediar = new NumarMare[b.bigNum.Length];

            for (int i = 0; i < b.length; i++)
            {
                NumarMare d = new NumarMare(a.bigNum.Length + b.bigNum.Length);;
                int       produs, rest, cat = 0;

                for (int j = 0; j < a.length; j++)
                {
                    produs = b.bigNum[i] * a.bigNum[j] + cat;
                    rest   = produs % 10;
                    cat    = produs / 10;

                    d.bigNum[j + i] = rest;
                }

                if (cat > 0)
                {
                    d.bigNum[a.length + i] = cat;
                }
                intermediar[i] = d;
            }

            for (int i = 0; i < intermediar.Length; i++)
            {
                c = c + intermediar[i];
            }

            return(c.RemoveZeros());
        }
Ejemplo n.º 2
0
        public static NumarMare operator +(NumarMare a, NumarMare b)
        {
            int       min = Math.Min(a.bigNum.Length, b.bigNum.Length);
            int       max = Math.Max(a.bigNum.Length, b.bigNum.Length);
            NumarMare c   = new NumarMare(max + 1);

            int k = 0;

            for (int i = 0; i < min; i++)
            {
                c.bigNum[i] = a.bigNum[i] + b.bigNum[i] + k;

                if (c.bigNum[i] >= 10)
                {
                    k            = 1;
                    c.bigNum[i] -= 10;
                }
                else
                {
                    k = 0;
                }
            }
            NumarMare d = new NumarMare();

            if (a.bigNum.Length > b.bigNum.Length)
            {
                d = a;
            }
            else
            {
                d = b;
            }

            for (int i = min; i < max; i++)
            {
                c.bigNum[i] = d.bigNum[i] + k;

                if (c.bigNum[i] >= 10)
                {
                    k            = 1;
                    c.bigNum[i] -= 10;
                }
                else
                {
                    k = 0;
                }
            }

            if (k == 1)
            {
                c.bigNum[max] = 1;
            }

            return(c.RemoveZeros());
        }