递归地将一串1和0解析为其十进制值

时间:2014-10-14 23:22:49

标签: java string parsing decimal converter

我的目标是从输入中获取一个1和0的字符串,然后使用bin2Dec方法将该二进制字符串解析为十进制数字。我该如何正确转换?

这是我到目前为止所做的:

public class Tester {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Enter a binary number string: ");
        String s = input.nextLine();
        System.out.println("The decimal value is " + bin2Dec(s));       
    }   
    public static int bin2Dec(String binaryString){       
    }
}

2 个答案:

答案 0 :(得分:1)

执行此操作的算法实际上非常简单。

如果你看一个二进制字符串,比如说," 10110" (22),你注意到的是等于16 + 4 + 2.看看这个有点困难,你会发现它对应于 1 * 2 ^ 4 + 0 * 2 ^ 3 + 1 * 2 ^ 2 + 1 * 2 ^ 1 + 0 * 2 ^ 0。看模式?对于值v和位置n的每个数字,它的贡献"总和为v * 2^n

现在,这个问题实际上更容易迭代(使用for循环),但我认为这是一个功课问题,因此你必须递归地进行。

您需要制作另一种方法public static int bin2dec(String bin, int position)(这称为重载方法,只要它们的签名不同,两种方法可以具有相同的名称)。在这种新方法中,您可以遵循上述算法:

  1. 如果position等于bin.length(),则您已超过字符串的结尾。只需返回0。

  2. 否则,将v设置为等于position处字符的整数值(您可以使用整数解析方法,也可以只使用if /三元组,因为那里只有两个选项。)

  3. v乘以2^position(提示:Math.pow)。

  4. 返回vbin2dec(bin, position + 1)(这是实际的递归部分)。

  5. 现在,在原始bin2dec中,您可以放置​​return bin2dec(bin, 0)。这只是允许你在没有初始化递归计数器的情况下调用bin2dec,这只是一般的簿记,呼叫者不想处理(这里不是那么重要,但在大型项目中非常重要)。

答案 1 :(得分:0)

public static String showAsBinString(int n, String s){

    if(n > 1){
        s = showAsBinString(n/2, s);
    }
    s += n%2 == 0 ? "0" : "1";
    return s;

}

System.out.println(showAsBinString(45, ""));

101101