我正在尝试创建二进制到十进制转换器。我不允许使用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
答案 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);
}
}