考虑负值的HugeInteger Class加减法

时间:2016-09-04 21:56:02

标签: java arrays

我目前正在编写一个可以接收40位数的HugeInteger类,并且我已经编写了一些比较测试。我最麻烦的是加法和减法方法。我能够获得两个值,但如果其中一个值为负,则不知道如何实现否定函数。我的减法方法似乎也无效。

public void add(HugeInteger hi) {
    if (digits[NUM_DIGITS] < 0) {
    negate();
    this.subtract(hi);
  }
    int carry = 0;  
    for(int i = digits.length-1; i >=0 ;i--) {
        int cur = this.digits[i] + hi.digits[i] + carry;
        if (cur >= 10){
            cur= cur-10;
            resultAdd[i] = cur;
            carry = 1;
        } else{
            resultAdd[i] = cur;
            carry = 0;
        }
    }
    StringBuilder builder = new StringBuilder();
    int j=0;
    for (int i : resultAdd) {
         builder.append(i);
         this.digits[j] = i;
         j++;
    }
    this.hi = builder.toString().replace("0", "");

}

public void subtract(HugeInteger hi) {      
    for(int i = digits.length-1; i >=0 ;i--) {
        if (this.digits[i] - hi.digits[i] < 0){
            this.digits[i-1]--;
            this.digits[i]+=10;
        }
        int cur = this.digits[i] - hi.digits[i];
        this.digits[i] = cur;
    }
    StringBuilder builder = new StringBuilder();
    int j=0;
    for (int i : resultAdd) {
         builder.append(i);
         this.digits[j] = i;
         j++;
    }
        this.hi = builder.toString().replace("0", "");
}
    public void negate() {
    if(this.positive){
        this.positive = false;
    } else{
        this.positive = true;
        this.hi = this.hi.replace("-", "");
    }
}

0 个答案:

没有答案