将整数上的数组转换为数字,就像位数组一样

时间:2014-02-20 10:09:20

标签: algorithm converter

使用位数组(0或1值),我可以将其转换为整数,并使用按位操作来操作它(检查一个位置是0还是1,切换0< - > 1)。 对于任意整数数组,类似的解决方案是什么?

例如,在位数组中,我可以通过执行移位来添加新位: x<< 1在x的末尾添加0位。 对于任意整数数组,我可以这样做: (1,2,7) - > 127然后在最后添加9我可以做127 * 10 + 9。 但是如果我想工作说11(或任何数字有2位或更多位数),这个程序是行不通的 在末尾。

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