使用位数组(0或1值),我可以将其转换为整数,并使用按位操作来操作它(检查一个位置是0还是1,切换0< - > 1)。 对于任意整数数组,类似的解决方案是什么?
例如,在位数组中,我可以通过执行移位来添加新位: x<< 1在x的末尾添加0位。 对于任意整数数组,我可以这样做: (1,2,7) - > 127然后在最后添加9我可以做127 * 10 + 9。 但是如果我想工作说11(或任何数字有2位或更多位数),这个程序是行不通的 在末尾。
答案 0 :(得分:1)
乍一看,在我看来,在这种情况下,您必须在添加新号码之前找出合适的乘数。
例如,如果你有数字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
完全正如我所解释的那样;其余的代码应该是非常自我解释的。
但请记住,这很容易溢出。您可能希望将其更改为使用无符号整数,但是,如果您使用大数组或具有非常大的整数的数组,这很容易溢出。
答案 1 :(得分:1)
您想转换positional notation中给出的数字。为此,您需要数字和基数。特别是必须提供基础,因为否则可能有不同的解释。考虑例如11
。在不知道基数的情况下,不清楚这是十一(基数10)还是三(基数2)甚至十七(基数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