예제 #1
0
    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());
    }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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);
            }
        }
예제 #4
0
        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' }));
            }
        }
예제 #5
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'));
        }