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 slrAbsFlPs = smlrByAbs.FltPntPsitin; int biggerFlPPos = 0; if (bigAbsFlPs > slrAbsFlPs) { biggerFlPPos = bigAbsFlPs; smlAbsNmbrs = MBgNmbr.AdNmbrZr(smlAbsNmbrs, -1 * (bigAbsFlPs - slrAbsFlPs)); } else { biggerFlPPos = slrAbsFlPs; bgrAbNmbs = MBgNmbr.AdNmbrZr(bgrAbNmbs, -1 * (slrAbsFlPs - 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)); }
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; } var longFltStr = longFloatPart.BNDgt; var 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); }
public static string DvdByN_bsInt(MBgNmbr myBigNmbr, char n_BaseCHAR) { string strPartDgt1 = myBigNmbr.BNDgt; int base_N = int.Parse(n_BaseCHAR.ToString()); int mainPartLength = strPartDgt1.Length - myBigNmbr.FltPntPsitin; var lsRmnngs = new List <int>(); int testDigit = 0; string testStr = ""; int rmnngVal = 0; int hlpVal = 0; lsRmnngs.Add(rmnngVal); for (int i = 0; i < mainPartLength; i++) { testStr = strPartDgt1[i].ToString(); testDigit = int.Parse(testStr) + hlpVal * 10; if (testDigit < base_N) { for (int m = i + 1; m < mainPartLength; m++) { testStr += strPartDgt1[i + 1].ToString(); testDigit = int.Parse(testStr); i++; lsRmnngs.Add(0); if (testDigit >= base_N) { break; } } } if (testDigit < base_N) { lsRmnngs.Add(0); break; } rmnngVal = testDigit / base_N; lsRmnngs.Add(rmnngVal); hlpVal = testDigit - rmnngVal * base_N; } string reslTmp = string.Join("", lsRmnngs); string resNoZero = reslTmp.TrimStart('0'); if (resNoZero.Length == 0) { resNoZero = "0"; } else if (myBigNmbr.SignNmbr < 0) { resNoZero = "-" + resNoZero; } return(resNoZero); }
public static MBgNmbr CrMBigNmb(string nmbrString) { string[] strArr = nmbrString.Split(new char[] { '.', ',', '-', '+' }, StringSplitOptions.RemoveEmptyEntries).ToArray(); int signNmbr = 1; for (int i = 0; i < nmbrString.Length; i++) { if (nmbrString[i].Equals('-')) { signNmbr *= -1; } else if (!(nmbrString[i].Equals('+'))) { break; } } string tmpStrVal = strArr[0].TrimStart('0'); if (tmpStrVal == "") { strArr[0] = "0"; } else { strArr[0] = tmpStrVal; } int FltPntPsitin = 0; if (strArr.Length > 1) { tmpStrVal = strArr[1].TrimEnd('0'); if (!tmpStrVal.Equals("")) { FltPntPsitin = tmpStrVal.Length; strArr[0] += tmpStrVal; } } if (strArr[0] == "0") { signNmbr = 1; } MBgNmbr nmbr = new MBgNmbr() { BNDgt = strArr[0], FltPntPsitin = FltPntPsitin, SignNmbr = signNmbr }; return(nmbr); }
public static List <MBgNmbr> RtnDvisnSptdMdl(MBgNmbr myBigNmbr, char base_N_inCHAR) { var strBase = base_N_inCHAR.ToString(); var intBigPart = MBgNmbr.DvdByN_bsInt(myBigNmbr, strBase[0]); var IntPrtBgNm = MBgNmbr.CrMBigNmb(intBigPart); var mltplr = "-" + strBase; var myHlpBig = MBgNmbr.CrMBigNmb(mltplr); var myNegativeIntPart = MBgNmbr.MultiplyBy(IntPrtBgNm, myHlpBig); var myRmnng = MBgNmbr.Sum2MBgNmbrs(myBigNmbr, myNegativeIntPart); var lsResult = new List <MBgNmbr>() { IntPrtBgNm, myRmnng }; return(lsResult); }
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); }
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; } } }
static void Main(string[] args) { string[] strArr = Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToArray(); int n = (int)Math.Round(double.Parse(strArr[0])); var numbrAtBas10 = MBgNmbr.CrMBigNmb(strArr[1]); var lsRmnngs = new List <string>(); string n_BaseStr = "" + n; string mainPartStr = MBgNmbr.DvdByN_bsInt(numbrAtBas10, '1'); string rmnngStr = ""; var myHlpMainPart = MBgNmbr.CrMBigNmb(mainPartStr); var testExitBool = false; do { var lsDvsnRes = MBgNmbr.RtnDvisnSptdMdl(myHlpMainPart, n_BaseStr[0]); rmnngStr = lsDvsnRes[1].Value(); mainPartStr = lsDvsnRes[0].Value(); var lsCmprExit = new List <string>(2) { n_BaseStr, mainPartStr }; MBgNmbr.IndntLngthWZrs(lsCmprExit); lsRmnngs.Add(rmnngStr); myHlpMainPart = MBgNmbr.CrMBigNmb(mainPartStr); testExitBool = MBgNmbr.FrstLnSmllrThnScnd(lsCmprExit[0], lsCmprExit[1]); } while (testExitBool); string nBasedStr = "" + mainPartStr; for (int i = lsRmnngs.Count; i > 0; i--) { nBasedStr += lsRmnngs[i - 1]; } Console.WriteLine(nBasedStr); }