二进制转十进制递归法
Binary to Decimal Recursive Method
我正在尝试找出通过递归从二进制转换为十进制的方法。我的方法是根据纸上计算得出的,如下所示。如果二进制为“1100”(十进制为 12),则
/*1100 ---> 12
(1)*2 + "100"
(2 + 1)*2 + "00"
(6 + 0)*2 + "0"
(12 + 0) + "" */
我已经坚持了一段时间。这是我想出的。我很欣赏任何想法。谢谢
int binary2decimal(String b)
{
if ("".equals(b)) //base case
return 0;
else //general case
{ if (b.length() == 1)
return (b.charAt(0) - '0') + binary2decimal(b.substring(1));
else
return (b.charAt(0) - '0')*2 + binary2decimal(b.substring(1));
}
}
int binary2decimal(String b)
{
int dec = 0;
int len = b.length();
if (len >= 1)
{
dec = (b.charAt(len-1) - '0');
if (len > 1) dec += binary2decimal(b.substring(0,len-1))<<1;
}
return dec;
}
重点是向后递归(即从 LSB 到 MSB)
edit binary2decimal(b.substring(0,len-2))
需要上升到 len-1
,固定
这应该有效:
class binary {
public static void main(String[] args)
{
int myBinary = binary2decimal("1100");
System.out.println(myBinary);
//System.out.println(binary2decimal("1100"));
}
static int binary2decimal(String b) {
int len = b.length();
if (len == 0) return 0;
String now = b.substring(0,1);
String later = b.substring(1);
return Integer.parseInt(now) * (int)Math.pow(2, len-1) + binary2decimal(later);
}
}
输出:
OUTPUT : 12
我正在尝试找出通过递归从二进制转换为十进制的方法。我的方法是根据纸上计算得出的,如下所示。如果二进制为“1100”(十进制为 12),则
/*1100 ---> 12
(1)*2 + "100"
(2 + 1)*2 + "00"
(6 + 0)*2 + "0"
(12 + 0) + "" */
我已经坚持了一段时间。这是我想出的。我很欣赏任何想法。谢谢
int binary2decimal(String b)
{
if ("".equals(b)) //base case
return 0;
else //general case
{ if (b.length() == 1)
return (b.charAt(0) - '0') + binary2decimal(b.substring(1));
else
return (b.charAt(0) - '0')*2 + binary2decimal(b.substring(1));
}
}
int binary2decimal(String b)
{
int dec = 0;
int len = b.length();
if (len >= 1)
{
dec = (b.charAt(len-1) - '0');
if (len > 1) dec += binary2decimal(b.substring(0,len-1))<<1;
}
return dec;
}
重点是向后递归(即从 LSB 到 MSB)
edit binary2decimal(b.substring(0,len-2))
需要上升到 len-1
,固定
这应该有效:
class binary {
public static void main(String[] args)
{
int myBinary = binary2decimal("1100");
System.out.println(myBinary);
//System.out.println(binary2decimal("1100"));
}
static int binary2decimal(String b) {
int len = b.length();
if (len == 0) return 0;
String now = b.substring(0,1);
String later = b.substring(1);
return Integer.parseInt(now) * (int)Math.pow(2, len-1) + binary2decimal(later);
}
}
输出:
OUTPUT : 12