自定义biginteger类的java递归加法

f0brbegy  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(273)

我正在尝试实现我自己的biginteger类,其中bigint是一个列表,其中每个元素都是数字中的一位。我正在尝试实现plus()方法,通过递归将两个bigint相互添加。
尽管我的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);
    }
}
gpnt7bae

gpnt7bae1#

你好像有打字错误。尝试改变 int x = x.size()-1int i = x.size()-1 .
而且,它会无限循环 i++ . 你的意思是 i-- ?

相关问题