我个人会采用最简单的方法:用于BigInteger
解析两个值,并比较这些结果。这不会非常有效,但它会非常简单 - 然后您可以进行基准测试以查看它是否足够快。
否则,您可以通过忽略前导零来找到有效长度 - 如果一个数字比另一个长,那么这就是您需要知道的全部。或者编写一个方法来获取可能更短的字符串的“有效”数字,必要时返回 0,然后从较长字符串的长度向下比较,直到一个字符串给出更大的值。就像是:
// Return the digit as a char to avoid bothering to convert digits to their
// numeric values.
private char GetEffectiveDigit(string text, int digitNumber)
{
int index = text.Length - digitNumber;
return index < 0 ? '0' : text[index];
}
private int CompareNumbers(string x, string y)
{
for (int i = int.Max(x.Length, y.Length); i >= 0; i--)
{
char xc = GetEffectiveDigit(x, i);
char yc = GetEffectiveDigit(y, i);
int comparison = xc.CompareTo(yc);
if (comparison != 0)
{
return comparison;
}
}
return 0;
}
请注意,这根本不会检查它是否是有效数字,并且绝对不会尝试处理负数。