public static string ToString(this BigInt self, int radix) {
const string symbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (radix < 2) {
throw ExceptionUtils.MakeArgumentOutOfRangeException("radix", radix, "radix must be >= 2");
}
if (radix > 36) {
throw ExceptionUtils.MakeArgumentOutOfRangeException("radix", radix, "radix must be <= 36");
}
bool isNegative = false;
if (self < BigInt.Zero) {
self = -self;
isNegative = true;
} else if (self == BigInt.Zero) {
return "0";
}
List<char> digits = new List<char>();
while (self > 0) {
digits.Add(symbols[(int)(self % radix)]);
self /= radix;
}
StringBuilder ret = new StringBuilder();
if (isNegative) {
ret.Append('-');
}
for (int digitIndex = digits.Count - 1; digitIndex >= 0; digitIndex--) {
ret.Append(digits[digitIndex]);
}
return ret.ToString();
}
#endif