internal static void Divide(System.Security.Cryptography.BigInt numerator, System.Security.Cryptography.BigInt denominator, ref System.Security.Cryptography.BigInt quotient, ref System.Security.Cryptography.BigInt remainder) { if (numerator < denominator) { quotient.Clear(); remainder.CopyFrom(numerator); } else if (numerator == denominator) { quotient.Clear(); quotient.SetDigit(0, 1); remainder.Clear(); } else { System.Security.Cryptography.BigInt a = new System.Security.Cryptography.BigInt(); a.CopyFrom(numerator); System.Security.Cryptography.BigInt num2 = new System.Security.Cryptography.BigInt(); num2.CopyFrom(denominator); uint num3 = 0; while (num2.Size < a.Size) { num2.Multiply(0x100); num3++; } if (num2 > a) { num2.Divide(0x100); num3--; } int num4 = 0; int digit = 0; int b = 0; System.Security.Cryptography.BigInt c = new System.Security.Cryptography.BigInt(); quotient.Clear(); for (int i = 0; i <= num3; i++) { num4 = (a.Size == num2.Size) ? a.GetDigit(a.Size - 1) : ((0x100 * a.GetDigit(a.Size - 1)) + a.GetDigit(a.Size - 2)); digit = num2.GetDigit(num2.Size - 1); b = num4 / digit; if (b >= 0x100) { b = 0xff; } Multiply(num2, b, ref c); while (c > a) { b--; Multiply(num2, b, ref c); } quotient.Multiply(0x100); Add(quotient, (byte)b, ref quotient); Subtract(a, c, ref a); num2.Divide(0x100); } remainder.CopyFrom(a); } }
internal string ToDecimal() { if (this.IsZero()) { return("0"); } System.Security.Cryptography.BigInt denominator = new System.Security.Cryptography.BigInt(10); System.Security.Cryptography.BigInt numerator = new System.Security.Cryptography.BigInt(); System.Security.Cryptography.BigInt quotient = new System.Security.Cryptography.BigInt(); System.Security.Cryptography.BigInt remainder = new System.Security.Cryptography.BigInt(); numerator.CopyFrom(this); char[] array = new char[(int)Math.Ceiling((double)((this.m_size * 2) * 1.21))]; int length = 0; do { Divide(numerator, denominator, ref quotient, ref remainder); array[length++] = decValues[remainder.IsZero() ? 0 : remainder.m_elements[0]]; numerator.CopyFrom(quotient); }while (!quotient.IsZero()); Array.Reverse(array, 0, length); return(new string(array, 0, length)); }