¿Cómo puedo solucionar este método "plus" en la clase Polynomial usando BigInteger

Agradezco la ayuda. Pude terminar de modificar todo en esta clase en formato BigInteger, excepto el método de composición. ¿Alguien puede ayudarme con esta última parte de por qué no funciona correctamente? Realmente lo aprecio, gracias.

import java.math.BigInteger;

public class Polynomial {
private BigInteger[] coef;  // coefficients
private int deg;     // degree of polynomial (0 for the zero polynomial)



/** Creates the constant polynomial P(x) = 1.
  */
public Polynomial(){
    coef = new BigInteger[1];
    coef[0] = new BigInteger("1");
    deg = 0;
}



/** Creates the linear polynomial of the form P(x) =  x + a.
  */
public Polynomial(int a){
    coef = new BigInteger[2];
    coef[1] = new BigInteger("1");
    coef[0] = new BigInteger(Integer.toString(a));
    deg = 1;
}

/** Creates the polynomial P(x) = a * x^b.
  */
public Polynomial(int a, int b) {
    coef = new BigInteger[b+1];
    for(int i = 0; i < b; i++){
        if(coef[i] == null)
            coef[i] = new BigInteger("0");

    }
    coef[b] = new BigInteger(Integer.toString(a));
    deg = degree();
}


/** Return the degree of this polynomial (0 for the constant polynomial).
  */
public int degree() {
    int d = 0;
    for (int i = 0; i < coef.length; i++)
        if (coef[i] != null) d = i; // check to make sure this works
    return d;
}

/** Return the composite of this polynomial and b, i.e., return this(b(x))  - compute using Horner's method.
  */
public Polynomial compose(Polynomial b) {
    Polynomial a = this;
    Polynomial c = new Polynomial(0, 0);
    for (int i = a.deg; i >= 0; i--) {
        Polynomial term = new Polynomial(a.coef[i].intValue(), 0);
        c = term.plus(b.times(c));
    }
    return c;
}

  public Polynomial times(Polynomial b) {
    Polynomial a = this;
    Polynomial c = new Polynomial(0, a.deg + b.deg);
    for (int i = 0; i <= a.deg; i++)
        for (int j = 0; j <= b.deg; j++)
            c.coef[i+j] = c.coef[i+j].add((a.coef[i].multiply(b.coef[j])));
    c.deg = c.degree();
    return c;
}

/** Return a textual representation of this polynomial.
  */
public String toString() {
    if (deg ==  0) return "" + coef[0];
    if (deg ==  1) return coef[1] + "x + " + coef[0];
    String s = coef[deg] + "x^" + deg;
    for (int i = deg-1; i >= 0; i--) {
        if      (coef[i] == null) continue;
        else if (coef[i].intValue()  > 0) s = s + " + " + ( coef[i]);
        else if (coef[i].intValue()  < 0) s = s + " - " + (coef[i].negate());
        if(coef[i].intValue() != 0)
            if      (i == 1) s = s + "x";
        else if (i >  1) s = s + "x^" + i;
    }
    return s;
}

public static void main(String[] args) {
   Polynomial p = new Polynomial(1,2);
   Polynomial q = new Polynomial(2,3); 
   Polynomial t    = p.compose(q); // incorrect
   System.out.println("p(q(x))     = " + t);  // incorrect


  }

}

Respuestas a la pregunta(1)

Su respuesta a la pregunta