我正在尝试实现我自己的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);
}
}
1条答案
按热度按时间gpnt7bae1#
你好像有打字错误。尝试改变
int x = x.size()-1
至int i = x.size()-1
.而且,它会无限循环
i++
. 你的意思是i--
?