我正在尝试实现我自己的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);
}
}
答案 0 :(得分:1)
看起来你有一个错字。尝试将int x = x.size()-1
更改为int i = x.size()-1
。
此外,它将与i++
无限循环。您的意思是i--
吗?