从200位十进制数列表中最长的二进制数

时间:2013-11-18 12:49:47

标签: c#

我有几个字符串表示数字为十进制。这些数字在二进制视图中具有< = 200位。我需要从列表中找到最长的二进制视图号。

例如,我有几个字符串:

“10”,“20”,“32”,“64”。列表中最长的长度为7(64 => 1000000)

主要问题是数字在二进制视图中有200位。

3 个答案:

答案 0 :(得分:0)

对这个问题不是100%肯定,但正如Rup建议的那样,你问2 ^ 200吗?

2^200 == 1.6069 x 10^60. 这将给你61个十进制数字的长度。

答案 1 :(得分:0)

您可以将字符串解析为BigIntegers,并使用公式floor(log_b(x)) + 1计算数字中的位数(以查找基数{{1}中x的位数}})。这些方面的东西:

b

答案 2 :(得分:0)

您可以将数字作为字符串进行比较,因为您只需要知道一个数字是否大于另一个数字。使用二进制数的十进制表示,逐步加倍该数字,并过滤掉小于该数字的数字,直到没有任何数字为止。然后你知道最大数字所需的位数。

示例:

string[] numbers = { "10", "20", "32", "64" };

string binary = "1";
int bits = 1;

do {

  numbers = numbers
    .Where(n => n.Length > binary.Length || n.CompareTo(binary) > 0)
    .ToArray();

  string s = "";
  int carry = 0;
  for (int i = binary.Length - 1; i >= 0 || carry > 0; i--) {
    if (i >= 0) {
      carry += (binary[i] - '0') * 2;
    }
    s = (char)((carry % 10) + 48) + s;
    carry /= 10;
  }
  binary = s;
  bits++;

} while (numbers.Length > 0);

Console.WriteLine(bits - 1);

输出:

7