コード例 #1
0
        public static MBgNmbr Sum2MBgNmbrs(MBgNmbr myNmbr1, MBgNmbr myNmbr2)
        {
            int     smallerByAbs = MBgNmbr.SmallByAbsIsFrstOrScnd(myNmbr1, myNmbr2);
            MBgNmbr bgrByAbs, smlrByAbs;
            int     signOfBigger = 0;

            if (smallerByAbs == 1)
            {
                smlrByAbs    = myNmbr1;
                bgrByAbs     = myNmbr2;
                signOfBigger = myNmbr2.SignNmbr;
            }
            else
            {
                smlrByAbs    = myNmbr2;
                bgrByAbs     = myNmbr1;
                signOfBigger = myNmbr1.SignNmbr;
            }
            string bgrAbNmbs       = bgrByAbs.BNDgt;
            string smlAbsNmbrs     = smlrByAbs.BNDgt;
            int    bigAbsFlPs      = bgrByAbs.FltPntPsitin;
            int    smallerAbsFlPos = smlrByAbs.FltPntPsitin;
            int    biggerFlPPos    = 0;

            if (bigAbsFlPs > smallerAbsFlPos)
            {
                biggerFlPPos = bigAbsFlPs;
                smlAbsNmbrs  = MBgNmbr.AdNmbrZr(smlAbsNmbrs, -1 * (bigAbsFlPs - smallerAbsFlPos));
            }
            else
            {
                biggerFlPPos = smallerAbsFlPos;
                bgrAbNmbs    = MBgNmbr.AdNmbrZr(bgrAbNmbs, -1 * (smallerAbsFlPos - bigAbsFlPs));
            }
            if (smlAbsNmbrs.Length < bgrAbNmbs.Length)
            {
                smlAbsNmbrs = MBgNmbr.AdNmbrZr(smlAbsNmbrs, bgrAbNmbs.Length - smlAbsNmbrs.Length);
            }
            string newStrBNDgt;

            if ((myNmbr1.SignNmbr * myNmbr2.SignNmbr) >= 0)
            {
                newStrBNDgt = MBgNmbr.AddTwoLines(bgrAbNmbs, smlAbsNmbrs);
            }
            else
            {
                newStrBNDgt = MBgNmbr.BiggerMinusSmaller(bgrAbNmbs, smlAbsNmbrs);
            }
            var myNmbr3 = new MBgNmbr()
            {
                BNDgt = newStrBNDgt, SignNmbr = signOfBigger, FltPntPsitin = biggerFlPPos
            };
            string newStringVal = myNmbr3.Value();

            return(MBgNmbr.CrMBigNmb(newStringVal));
        }
コード例 #2
0
        public static int SmallByAbsIsFrstOrScnd(MBgNmbr myNmbr1, MBgNmbr myNmbr2)
        {
            int     floatPstn1 = myNmbr1.FltPntPsitin;
            int     floatPstn2 = myNmbr2.FltPntPsitin;
            MBgNmbr longFloatPart, shortFloatPart;
            int     longFloatLngth  = 0;
            int     shortFloatLngth = 0;

            if (floatPstn2 > floatPstn1)
            {
                longFloatLngth  = floatPstn2;
                shortFloatLngth = floatPstn1;
                longFloatPart   = myNmbr2;
                shortFloatPart  = myNmbr1;
            }
            else
            {
                longFloatLngth  = floatPstn1;
                shortFloatLngth = floatPstn2;
                longFloatPart   = myNmbr1;
                shortFloatPart  = myNmbr2;
            }
            string longFltStr  = longFloatPart.BNDgt;
            string shortFltStr = MBgNmbr.AdNmbrZr(shortFloatPart.BNDgt, -1 * (longFloatLngth - shortFloatLngth));
            var    lsToEqual   = new List <string>(2);

            lsToEqual.Add(longFltStr);
            lsToEqual.Add(shortFltStr);
            MBgNmbr.IndntLngthWZrs(lsToEqual);
            bool smallerLong = MBgNmbr.FrstLnSmllrThnScnd(lsToEqual[0], lsToEqual[1]);
            int  resCmpr     = 0;

            if (smallerLong)
            {
                if (floatPstn2 > floatPstn1)
                {
                    resCmpr = 2;
                }
                else
                {
                    resCmpr = 1;
                }
            }
            else
            if (floatPstn2 > floatPstn1)
            {
                resCmpr = 1;
            }
            else
            {
                resCmpr = 2;
            }
            return(resCmpr);
        }
コード例 #3
0
        public static MBgNmbr MultiplyBy(MBgNmbr MBgNmbr, MBgNmbr myBigMultiplier)
        {
            string tmpNmbrString   = MBgNmbr.BNDgt;
            string tmpMltplrString = myBigMultiplier.BNDgt;
            var    lstMtpldLines   = new List <string>(tmpMltplrString.Length);

            for (int i = tmpMltplrString.Length - 1; i >= 0; i--)
            {
                string line = MBgNmbr.MltiplLnByChr(tmpNmbrString, tmpMltplrString[i]);
                line = MBgNmbr.AdNmbrZr(line, (-1 * (tmpMltplrString.Length - 1 - i)));
                lstMtpldLines.Add(line);
            }
            MBgNmbr.IndntLngthWZrs(lstMtpldLines);
            string lineSum = lstMtpldLines[0];

            for (int i = 1; i < lstMtpldLines.Count; i++)
            {
                string tmpLine  = lstMtpldLines[i];
                var    lsAppend = new List <string>(2);
                lsAppend.Add(lineSum);
                lsAppend.Add(tmpLine);
                MBgNmbr.IndntLngthWZrs(lsAppend);
                lineSum = MBgNmbr.AddTwoLines(lsAppend[0], lsAppend[1]);
            }
            int pstnFloatPoint = MBgNmbr.FltPntPsitin + myBigMultiplier.FltPntPsitin;
            int nmbrLeadZeroes = pstnFloatPoint - lineSum.Length + 1;

            if (nmbrLeadZeroes > 0)
            {
                lineSum = MBgNmbr.AdNmbrZr(lineSum, nmbrLeadZeroes);
            }
            int newSign     = myBigMultiplier.SignNmbr * MBgNmbr.SignNmbr;
            var newMyNumber = new MBgNmbr()
            {
                BNDgt = lineSum, FltPntPsitin = pstnFloatPoint, SignNmbr = newSign
            };
            string resultValue = newMyNumber.Value();
            var    resMyNumber = MBgNmbr.CrMBigNmb(resultValue);

            return(resMyNumber);
        }
コード例 #4
0
        public static void IndntLngthWZrs(List <string> inLsLines)
        {
            int maxLength = 0;

            for (int i = 0; i < inLsLines.Count; i++)
            {
                if (maxLength < inLsLines[i].Length)
                {
                    maxLength = inLsLines[i].Length;
                }
            }
            for (int i = 0; i < inLsLines.Count; i++)
            {
                string elm     = inLsLines[i];
                int    nmbZero = maxLength - elm.Length;
                if (nmbZero > 0)
                {
                    string newElm = MBgNmbr.AdNmbrZr(elm, nmbZero);
                    inLsLines[i] = newElm;
                }
            }
        }