public static int SmallerByAbsIsFirstOrSecond(MyBigNumber myNmbr1, MyBigNumber myNmbr2) { int floatPstn1 = myNmbr1.FloatPointPosition; int floatPstn2 = myNmbr2.FloatPointPosition; MyBigNumber 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.PartDigits; string shortFltStr = MyBigNumber.AddNmbrZero(shortFloatPart.PartDigits, -1 * (longFloatLngth - shortFloatLngth)); var lsToEqual = new List <string>(2); lsToEqual.Add(longFltStr); lsToEqual.Add(shortFltStr); MyBigNumber.IndentLengthWithZeroes(lsToEqual); bool smallerLong = MyBigNumber.FirstLineSmallerThanSecond(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); }
public static MyBigNumber MultiplyBy(MyBigNumber myBigNumber, MyBigNumber myBigMultiplier) { string tmpNmbrString = myBigNumber.PartDigits; string tmpMltplrString = myBigMultiplier.PartDigits; var lstMtpldLines = new List <string>(tmpMltplrString.Length); for (int i = tmpMltplrString.Length - 1; i >= 0; i--) { string line = MyBigNumber.MultiplyLineByChar(tmpNmbrString, tmpMltplrString[i]); line = MyBigNumber.AddNmbrZero(line, (-1 * (tmpMltplrString.Length - 1 - i))); lstMtpldLines.Add(line); } MyBigNumber.IndentLengthWithZeroes(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); MyBigNumber.IndentLengthWithZeroes(lsAppend); lineSum = MyBigNumber.AddTwoLines(lsAppend[0], lsAppend[1]); } int pstnFloatPoint = myBigNumber.FloatPointPosition + myBigMultiplier.FloatPointPosition; int nmbrLeadZeroes = pstnFloatPoint - lineSum.Length + 1; if (nmbrLeadZeroes > 0) { lineSum = MyBigNumber.AddNmbrZero(lineSum, nmbrLeadZeroes); } int newSign = myBigMultiplier.SignNmbr * myBigNumber.SignNmbr; var newMyNumber = new MyBigNumber() { PartDigits = lineSum, FloatPointPosition = pstnFloatPoint, SignNmbr = newSign }; string resultValue = newMyNumber.Value(); var resMyNumber = MyBigNumber.CreateMyBigNumber(resultValue); return(resMyNumber); }