比较存储在string中的非常大的数字

use*_*693 1 c# string largenumber compare

比较字符串文字中包含的两个非常大的数字的最佳方法是什么?

例如,我想比较以下内容:"90000000000000000000000000000000000000000000000000000000000000000000000000001""100000000000000000000000000000000000000000000000000000000000000000000000000009"

要么

"000000000011111111111111111111111111111111111111111111111111111111111111111111""0000001111111111111111111111111111111111111111111111111111111111111111111111"

在这两种情况下,显然第二个更大,但是如何在不迭代元素的情况下有效地找到它?

Jon*_*eet 8

我个人会采用最简单的方法:用于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;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这并不会检查它是否是有效数字,并且它绝对不会尝试处理负数.