递归地添加两个二进制数,没有按位运算; Java家庭作业

时间:2017-04-09 03:02:08

标签: java

我认为我主要是为家庭作业问题找到解决方案。

这适用于201 CS课程。现在我只想让逻辑正确。目前,它并没有按预期运作,但它已经接近了。

我们不想使用.toBinary,bitwise或其他任何东西。我们还没有被教过stringBuilder,所以我想避免使用它。

有一个System.out.println();如果您从下到上阅读控制台,则提供正确答案的方法。

public static void main(String[] args) {

        System.out.println(addBin(1100111011,1101110011));
}

public static String addBin(int num1,int num2){

    String result = "";

    if(num1 > 0 || num2 > 0){

        int part1 = num1%10, part2 = num2%10;
        int rem1 = num1/10, rem2 = num2/10;

        result += Integer.toString((part1 + part2)%2);

        //System.out.println(result);

        int carry = (part1 + part2) /2;

        addBin(rem1 + carry, rem2);

        return result;

    }

    return result;

}

因此,此示例将输出

添加1100111011和1101110011
0
1
1
1
0
1
0
1
0
1
1
0

当正确答案是11010101110时。

我无法理解如何正确使用" pop" "结果"适当的部分。能否帮助我理解这个过程,可能是在这个问题的背景下?

谢谢!

1 个答案:

答案 0 :(得分:0)

从输出中可以看出,您以相反的顺序获得了正确的结果,但是您没有将任何旧的结果附加到当前计算的结果中。

在if条件中,您正在调用addBin()函数,但您没有使用它在任何地方提供的结果。只需将该行更改为以下内容:

result = addBin(rem1 + carry, rem2)+result;

这应该有效地将所有结果附加到当前答案前面,这样您就不会向后退方向。希望这会有所帮助。