二进制到十进制转换器

时间:2016-05-01 03:27:47

标签: python binary decimal data-conversion

我正在尝试创建二进制到十进制转换器。我不允许使用int()和/或bin()来转换#systems。

我已经花了12个小时,我觉得自己无处可去,我是一个完全新手,任何帮助都会很棒。我要做的是将用户输入作为字符串,并将其反转,以便我可以乘以2 ^(字符串长度)

index = 0
total = 0
binary_number = str(input("please input a number")) 
print("input test: ", binary_number) #test line
size = len(binary_number) - 1
print(size) #determine string length
binary_number = binary_number[::-1]
print("reversed: ", binary_number) #test line


while index < size:
    for a in range(len(binary_number)):
        if binary_number[index] == '1':
            total = binary_number * 2**[index]
            index += 1
        else:
            total = total
            index +=1

2 个答案:

答案 0 :(得分:0)

你的代码有一些愚蠢的错误。

1。对于长度为&#39; L&#39;的字符串,有效索引范围为0到(L-1)。

在你的while循环中,你写了#34;指数&lt;尺寸&#34;。如果你用这条线没有减小1的尺寸,这本来是完美的, size = len(binary_number) - 1

2. 将二进制字符串转换为十进制数

的逻辑不正确

while循环中的这一行&#34;对于in范围(len(binary_number)):&#34;是完全错误的。你不需要这个。

3。每当你找到一个&#39; 1&#39;在你的二进制字符串中,你应该将2 **索引添加到你所拥有的总数中。但是,相反,你指定&#34;总计&#34;一个新的价值。

您计算的新值也是错误的。

您将其计算为 - &gt; binary_number * 2 ** [index]

请记住,binary_number是一个列表。 [index]也是一个列表。你在这里搞砸了。你想做1 * 2 **指数。您应该删除索引周围的方括号。您可以改为使用圆括号()。此外,您应该用 - int(binary_number [index])替换binary_number而不是binary_number。或者,你不需要它。

这是您的代码,包含最少的更改和打印声明 -

index = 0
total = 0
binary_number = str(input("please input a number")) 
print("input test: ", binary_number) #test line
size = len(binary_number) - 1
print(size) #determine string length
binary_number = binary_number[::-1]
print("reversed: ", binary_number) #test line


while index <= size:
        if binary_number[index] == '1':
            total +=  (2**index)
            index += 1
        else:
            total = total
            index +=1
print(total)

答案 1 :(得分:0)

import java.util.*;

class BtoD {

    public static int power(int base,int exp){
        int prod=1;
        while(exp>=0){
            if(exp==0)
                 prod=prod*1;
            else{
                prod=prod*base;
            }
            exp--;  
        }
        return prod;
    }

    public static void main(String args[]){
        Scanner sc=new Scanner(System.in);
        String input=sc.next();
        String s[]=input.split("");
        int n=s.length;
        int decsum=0;
        int bin[]=new int[n];
        for(int i=0;i<n;i++){
            bin[i]=Integer.parseInt(s[i]);
        }
        int k=0;
       for(int i=n-1;i>=0;i--){
          decsum=decsum+bin[i]*power(2,k);
          k++;
       }
      System.out.println(decsum);

    }
}