自定义BigInteger类的递归添加

时间:2016-05-10 02:12:03

标签: java recursion biginteger

我正在尝试实现我自己的BigInteger类,其中BigInt是一个List,其中每个元素都是数字中的一位数。我正在尝试实现plus()方法,通过递归将两个BigInts添加到彼此中。

虽然我的add()遇到了麻烦,但我不确定如何为这种情况实现get方法。

public BigInt plus(BigInt operand){
    List<Integer> a = this.getDigit();
    List<Integer> b = operand.getDigit();
    List<Integer> sum = new ArrayList<>();

    if(a.size() > b.size()){
        sum = add(a,b,0,sum);
    } else {
        sum = add(b,a,0,sum);
    }
    return new BigInt(sum);
}

private List<Integer> add(List<Integer> x, List<Integer> y, final int carry, List<Integer> result){
    int sum;
    int c = carry;
    //if block is base case?
    if(y.size() == 1){
        sum = getSum(x,y,carry);
        c = getCarry(result, sum);

        if(sum>=10){
            sum = (x.get(x.size()-1) + c);
            x.remove(x.size()-1);
            x.add(sum);
        }
        for(int i = x.size()-1; i >= 0; i--){

            result.add(0,x.get(i));
        }
        return result;
    }

    //recursive case?
    sum = getSum(x,y,carry);
    c = getCarry(result,sum);

    return this.add(x,y,c,result);
}

public int getSum(List<Integer> x, List<Integer> y, final int carry){
    return 0;//PLACEHOLDER
}
public int getCarry(List<Integer> result, int sum){
    return 0;//PLACEHOLDER
}

和我的构造函数

private BigInt(List<Integer> b){
    this.digit = new ArrayList<>();
    this.digit.addAll(b);

}
private BigInt(String str){
    this.digit = new ArrayList<>();
    String[] s = str.split("");
    List<String> list = new ArrayList<>(Arrays.asList(s));
    for(int i = 0; i < list.size(); i++){
        int b = Integer.valueOf(list.get(i));
        this.digit.add(b);
    }
}

1 个答案:

答案 0 :(得分:1)

看起来你有一个错字。尝试将int x = x.size()-1更改为int i = x.size()-1

此外,它将与i++无限循环。您的意思是i--吗?