转换为Base 10

时间:2010-03-07 23:22:28

标签: binary decimal hex

问题

假设我有一个字符串或数组表示基数为N的数字,N> 1,其中N是2的幂。假设所表示的数字大于系统可以处理的实数(int或双等)。

如何将其转换为十进制字符串?

我愿意接受满足上述标准(二进制,十六进制......)的任何基数N的解决方案。那就是如果你有一个适用于至少一个基数N的解决方案,我很感兴趣:)


示例:

Input: "10101010110101"

-

Output: "10933"

4 个答案:

答案 0 :(得分:1)

这取决于特定的语言。有些人对任意长度的整数有本机支持,而其他人可以使用GMP之类的库。之后,只需在表格中查找数字值,然后适当地进行乘法。

答案 1 :(得分:0)

这是我上个学期开设的基于Python的计算机科学课程,旨在处理16岁以下的基础。

import string

def baseNTodecimal():
    # get the number as a string
    number = raw_input("Please type a number: ")
    # convert it to all uppercase to match hexDigits (below)
    number = string.upper(number)
    # get the base as an integer
    base = input("Please give me the base: ")
    # the number of values that we have to change to base10
    digits = len(number)
    base10 = 0
    # first position of any baseN number is 1's
    position = 1
    # set up a string so that the position of
    # each character matches the decimal
    # value of that character
    hexDigits = "0123456789ABCDEF"
    # for each 'digit' in the string
    for i in range(1, digits+1):
        # find where it occurs in the string hexDigits
        digit = string.find(hexDigits, number[-i])
        # multiply the value by the base position
        # and add it to the base10 total
        base10 = base10 + (position * digit)
        print number[-i], "is in the " + str(position) + "'s position"
        # increase the position by the base (e.g., 8's position * 2 = 16's position)
        position = position * base
    print "And in base10 it is", base10

基本上,它将输入作为一个字符串,然后通过并将每个“数字”加起来乘以基数为10的位置。实际上检查每个数字在字符串hexDigits中的索引位置,该字符串用作数值。

假设它返回的数字实际上大于编程语言支持的数字,你可以建立一个代表整个数字的Ints数组:

[214748364, 8]

代表2147483648(Java int无法处理的数字)。

答案 2 :(得分:0)

这是我刚写的一些PHP代码:

function to_base10($input, $base)
{
  $result = 0;
  $length = strlen($input);
  for ($x=$length-1; $x>=0; $x--)
    $result += (int)$input[$x] * pow($base, ($length-1)-$x);
  return $result;
}

这很简单:只需循环输入字符串的每个字符

这适用于任何基础< 10但它可以很容易地扩展到支持更高的碱基(A-> 11,B-> 12等)

编辑:哦没看到python代码:) 是的,那更酷了

答案 3 :(得分:0)

我会选择一种或多或少支持本机数学表示的语言,如'lisp'。我知道人们似乎越来越少地使用它,但它仍然有它的价值。

我不知道这是否足够大,但我在公共lisp环境(CLISP)中可以表示的最大整数是2 ^(2 ^ 20)

>> (expt 2 (expt 2 20)

在lisp中,您可以轻松地表示hex,dec,oct和bin,如下所示

>> \#b1010 
10
>> \#o12
10
>> 10
10
>> \#x0A
10

您可以使用#nR

在2到36的其他基础上写出有理数
>> #36rABCDEFGHIJKLMNOPQRSTUVWXYZ
8337503854730415241050377135811259267835

有关lisp中数字的详细信息,请参阅:Practical Common Lisp Book