我有几个字符串表示数字为十进制。这些数字在二进制视图中具有< = 200位。我需要从列表中找到最长的二进制视图号。
例如,我有几个字符串:
“10”,“20”,“32”,“64”。列表中最长的长度为7(64 => 1000000)
主要问题是数字在二进制视图中有200位。
答案 0 :(得分:0)
对这个问题不是100%肯定,但正如Rup建议的那样,你问2 ^ 200吗?
2^200 == 1.6069 x 10^60. 这将给你61个十进制数字的长度。
答案 1 :(得分:0)
您可以将字符串解析为BigInteger
s,并使用公式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