Esempio n. 1
0
        private static CVeryLong Mult10(CVeryLong l) //умножить аргумент на 10
        {
            char[] temp = new char[size];
            for (int j = l.vlen; j >= 0; j--)
            {
                temp[j + 1] = l.vlstr[j];
            }
            temp[0]          = '0';
            temp[l.vlen + 1] = '\0';

            char[] c = new char[l.vlen + 1];
            Array.Copy(temp, c, l.vlen + 1);
            CVeryLong vl = new CVeryLong(c);

            return(vl);
        }
Esempio n. 2
0
        public static CVeryLong operator *(CVeryLong l, CVeryLong d) //Дисторшн операции "*" для класса
        {
            CVeryLong pprod   = new CVeryLong(0);                    //произведние одного разряда
            CVeryLong tempsum = new CVeryLong(0);                    //текущая сумма

            for (int j = 0; j < d.vlen; j++)
            {
                int digit = d.vlstr[j] - '0';
                pprod = Muldigit(digit, l);
                for (int k = 0; k < j; k++)
                {
                    pprod = Mult10(pprod);
                }
                tempsum = tempsum + pprod;
            }
            return(tempsum);
        }
Esempio n. 3
0
        public static CVeryLong operator +(CVeryLong l, CVeryLong d)  //Дисторшн операции "+" для класса
        {
            char[] temp = new char[size];
            int    j;

            //ищем самое длинное число.
            int maxlen = (l.vlen > d.vlen) ? l.vlen : d.vlen;
            //maxlen += 3;
            int carry = 0;

            for (j = 0; j < maxlen; j++)
            {
                int d1L      = (j > l.vlen - 1) ? 0 : l.vlstr[j] - '0';
                int d2D      = (j > d.vlen - 1) ? 0 : d.vlstr[j] - '0';
                int digitsum = d1L + d2D + carry;
                if (digitsum >= 10)
                {
                    digitsum -= 10;
                    carry     = 1;
                }
                else
                {
                    carry = 0;
                }
                char ch = (char)digitsum;
                ch     += '0';
                temp[j] = ch;
            }
            if (carry == 1)
            {
                temp[j++] = '1';
            }
            temp[j] = '\0';

            char[] tt = new char[j];
            Array.Copy(temp, tt, j);

            CVeryLong vl = new CVeryLong(tt);

            return(vl);
        }
Esempio n. 4
0
        private static CVeryLong Muldigit(int d2, CVeryLong l) //утножить число на аргумент(цифру)
        {
            char[] temp = new char[size];
            int    j;
            int    carry = 0;

            for (j = 0; j < l.vlen; j++)
            {
                int d1        = l.vlstr[j] - '0';
                int digitprod = d1 * d2;
                digitprod += carry;
                if (digitprod >= 10)
                {
                    carry      = digitprod / 10;
                    digitprod -= carry * 10;
                }
                else
                {
                    carry = 0;
                }
                char ch = (char)digitprod;
                ch     += '0';
                temp[j] = ch;
            }
            if (carry != 0)
            {
                char c = (char)carry;
                c        += '0';
                temp[j++] = c;
            }

            temp[j] = '\0';

            char[] dd = new char[j];
            Array.Copy(temp, dd, j);
            CVeryLong vl = new CVeryLong(dd);

            return(vl);
        }