public static int[] GetDigitsFromNumber(BigInteger n, int stateCount) { var digits = new List <int>(); while (n != 0) { n = BigInteger.DivRem(n, stateCount, out var digit); digits.Add((int)digit); } return(digits.ToArray()); }
public string ToMixString() { var value = Factor(this); var result = BigInteger.DivRem(value.Numerator, value.Denominator, out var remainder); if (remainder == 0) { return(result.ToString()); } else { return(result + ", " + remainder + "/" + value.Denominator); } }
public string ToMixString() { Factor(); BigInteger remainder; BigInteger result = BigInteger.DivRem(numerator, denominator, out remainder); if (remainder == 0) { return(result.ToString()); } else { return(result + ", " + remainder + "/" + denominator); } }
public string ToString(int precision, bool trailingZeros = false) { Factor(); BigInteger remainder; BigInteger result = BigInteger.DivRem(numerator, denominator, out remainder); if (remainder == 0 && trailingZeros) { return(result + ".0"); } else if (remainder == 0) { return(result.ToString()); } BigInteger decimals = (numerator * BigInteger.Pow(10, precision)) / denominator; if (decimals == 0 && trailingZeros) { return(result + ".0"); } else if (decimals == 0) { return(result.ToString()); } StringBuilder sb = new StringBuilder(); while (precision-- > 0 && decimals > 0) { sb.Append(decimals % 10); decimals /= 10; } if (trailingZeros) { return(result + "." + new string(sb.ToString().Reverse().ToArray())); } else { return(result + "." + new string(sb.ToString().Reverse().ToArray()).TrimEnd(new char[] { '0' })); } }
public string ToString(int precision, bool trailingZeros = false) { var value = Factor(this); var nf = CultureInfo.CurrentUICulture.NumberFormat; var result = BigInteger.DivRem(value.Numerator, value.Denominator, out var remainder); if (remainder == 0 && trailingZeros) { return(result + nf.NumberDecimalSeparator + "0"); } else if (remainder == 0) { return(result.ToString()); } var decimals = (value.Numerator * BigInteger.Pow(10, precision)) / value.Denominator; if (decimals == 0 && trailingZeros) { return(result + nf.NumberDecimalSeparator + "0"); } else if (decimals == 0) { return(result.ToString()); } var sb = new StringBuilder(); while (precision-- > 0) { sb.Append(decimals % 10); decimals /= 10; } var r = result + nf.NumberDecimalSeparator + new string(sb.ToString().Reverse().ToArray()); return(trailingZeros ? r : r.TrimEnd('0')); }