【发布时间】:2014-02-20 21:18:55
【问题描述】:
使用一组位(0 或 1 个值),我可以将其转换为整数并使用按位运算来操作它(检查一个位置是 0 还是 1,切换 0 1)。 对于任意整数数组,类似的解决方案是什么?
例如,在位数组 a 中,我可以通过移位添加一个新位: x 127 然后在最后加上 9 我可以做 127 * 10 + 9。 但是,如果我想工作说 11(或任何 2 位或更多位数的数字),此程序将无法工作 在最后。
【问题讨论】:
使用一组位(0 或 1 个值),我可以将其转换为整数并使用按位运算来操作它(检查一个位置是 0 还是 1,切换 0 1)。 对于任意整数数组,类似的解决方案是什么?
例如,在位数组 a 中,我可以通过移位添加一个新位: x 127 然后在最后加上 9 我可以做 127 * 10 + 9。 但是,如果我想工作说 11(或任何 2 位或更多位数的数字),此程序将无法工作 在最后。
【问题讨论】:
乍一看,在我看来,在这种情况下,您必须在添加新数字之前找出要使用的正确乘数。
例如,如果你有数字127,想追加数字98,你必须这样做:new_number = 127*100 + 98,即你要找出n在新数字中有多少个数字,然后在添加之前将另一个数字乘以 10^n。
这是我的实现:
int array_to_number(int arr[], int size) {
if (size == 0)
return 0;
int result = arr[0];
int n;
int i;
int mul;
for (i = 1; i < size; i++) {
for (n = arr[i], mul = 1; n; mul *= 10, n /= 10)
; /* Intentionally left blank */
result = result*mul + arr[i];
}
return result;
}
第二个for 完全按照我的解释做;其余的代码应该是不言自明的。
但请记住,这很容易溢出。您可能希望将其更改为使用无符号整数,但是,如果您处理大数组或具有非常大整数的数组,这仍然很容易溢出。
【讨论】:
您想转换positional notation 中给出的数字。为此,您需要数字和基础。特别是必须提供基础,否则可能会有不同的解释。考虑例如11。在不知道基数的情况下,不清楚这是 11(基数 10)还是 3(基数 2)甚至是 17(基数 16)。所以必须明确提供基础。给定基数和数字,对于每个数字,您将到目前为止的结果乘以基数并添加数字。对于二进制,以 2 为底,乘以 2 与您提到的左移相同。以下是 Python 中的示例:
def convert_number( digits, base ):
result = 0
for x in digits:
result = result * base + x
return result
print( convert_number( [1, 1, 0, 1], 2 )) #13
print( convert_number( [1, 1, 0, 1], 10 )) #1101
print( convert_number( [1, 1, 0, 1], 16 )) #4353
【讨论】: