我被告知我必须写一个BigInteger类,我知道有一个,但我必须自己写。我将采用整数或字符串,并将它们转换为数组来存储它们。从那里开始,我可以对这些数字进行加,减和乘。我已经把整数和字符串都做好了,并且让数组很好。我有其他问题。BigInteger需要帮助的作业
对于添加,我试图做一些检查数字类型数组的大小,然后设置哪些越来越小。从那里,我有它循环,直到它到达较小的一端,并且随着它循环它将两位数字的该部分的数字,并添加它们。现在可以,直到他们大于10岁,在这种情况下,我需要携带一个号码。我想我也有这个工作。
请记住我的BigInt所具有的两件事是数字的数组和一个int符号,1或-1。
所以在这种情况下,我有问题,它添加正确的符号是正确的。与减法相同。
至于乘法,我完全失去了,甚至没有尝试过。以下是我尝试过的一些代码:(add函数),请帮助我。
public BigInt add(BigInt val){
int[] bigger;
int[] smaller;
int[] dStore;
int carryOver = 0;
int tempSign = 1;
if(val.getSize() >= this.getSize()){
bigger = val.getData();
smaller = this.getData();
dStore = new int[val.getSize()+2];
if(val.getSign() == 1){
tempSign = 1;
}else{
tempSign = -1;
}
}else{
bigger = this.getData();
smaller = val.getData();
dStore = new int[this.getSize()+2];
if(this.getSign() == 1){
tempSign = 1;
}else{
tempSign = -1;
}
}
for(int i=0;i<smaller.length;i++){
if((bigger[i] < 0 && smaller[i] < 0) || (bigger[i] >= 0 && smaller[i] >= 0)){
dStore[i] = Math.abs(bigger[i]) + Math.abs(smaller[i]) + carryOver;
}else if((bigger[i] <= 0 || smaller[i] <= 0) && (bigger[i] > 0 || smaller[i] > 0)){
dStore[i] = bigger[i] + smaller[i];
dStore[i] = Math.abs(dStore[i]);
}
if(dStore[i] >= 10){
dStore[i] = dStore[i] - 10;
if(i == smaller.length - 1){
dStore[i+1] = 1;
}
carryOver = 1;
}else{
carryOver = 0;
}
}
for(int i = smaller.length;i<bigger.length;i++){
dStore[i] = bigger[i];
}
BigInt rVal = new BigInt(dStore);
rVal.setSign(tempSign);
return rVal;
对于所有三种操作(加法,减法和乘法),最简单的实现方法是实现您在小学时用于在纸上执行这些操作的相同算法。祝你好运! – 2011-02-14 04:15:10
您是否向前或向后存储值?您的添加算法似乎从左向右添加,除非您将数字保存为反向,否则您使用的变体添加算法与您在小学时学到的算法略有不同,这是错误的。 – muddybruin 2011-02-14 04:33:52
我有相反的数组中的数字,是的。 – Tempus35 2011-02-14 04:35:22