【问题标题】:How to compare two strings that represent numbers in c#?如何比较两个代表c#中数字的字符串?
【发布时间】:2019-03-18 14:31:03
【问题描述】:

我有两个字符串 "73248723847239847283974283749238""98231912938129381290120378988945" 它们包含数字,可能有 50 个字符长。我只找到了一个解决方案:将其转换为数字数组并比较它的总和,但从性能方面来说并不是很好。有谁知道我可以比较一下吗?

【问题讨论】:

  • 为什么不能将它们作为常规字符串进行比较?
  • 因为这个字符串代表数字,我必须比较它并找到其中最大的一个。
  • 如何将它们转换为数字数组并比较总和以获得正确答案?我的意思是,500 = 5,而 199 = 19。500 明显大于 199,但 5 小于 19。
  • 即使没有零也行不通。 12 => 1 + 2 哪里有 21 => 2 + 12 + 1 == 1 + 2
  • 你考虑过 BigIntegers 吗? docs.microsoft.com/en-us/dotnet/api/…

标签: c# string numbers compare


【解决方案1】:

我必须比较它并找到其中最大的一个。

你可以用BigInteger处理它

BigInteger b1 = BigInteger.Parse("73248723847239847283974283749238");
BigInteger b2 = BigInteger.Parse("98231912938129381290120378988945");

BigInteger result = BigInteger.Max(b1, b2);

将其转换为数字数组并比较它的总和,但从性能方面来说不是很好

旁注 - 性能是这种方法的最小问题?

【讨论】:

  • 一个类 String 包含 CompareTo 方法,在这种情况下它工作得很好。
【解决方案2】:

使用 PadLeft() 使其长度相同,然后对其进行比较:

var s1 = "73248723847239847283974283749238";
var s2 = "98231912938129381290120378988945";

s1 = s1.PadLeft(50, '0');
s2 = s2.PadLeft(50, '0');

var compareResult = s1.CompareTo(s2);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-18
    • 2019-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    相关资源
    最近更新 更多