LInfiniteInteger thattemp = new LInfiniteInteger(anInfiniteInteger.toString()); thattemp.isNegative = false; thistemp.isNegative = false; if(thattemp.compareTo(thistemp) > 0) { negateAtEnd = true; } System.out.println("[ME] Attempting to detect if final answer should be negitive: " + negateAtEnd + " : " + thattemp.compareTo(thistemp) + " : When compareing " + thattemp.toString() + " with " + thistemp.toString()); //find the 9's complement of the this number LInfiniteInteger ninesc = new LInfiniteInteger(""); Node thisnode = thistemp.lastNode; Node thatnode = thattemp.lastNode; while(thisnode != null || thatnode != null) { if(thatnode != null) { ninesc.addfirst(9-thatnode.data); thatnode = thatnode.previous; } else { ninesc.addfirst(9); } if(thisnode != null) { thisnode = thisnode.previous; } } ninesc.removeLast(); System.out.println("[ME] Calculated 9's complement: " + ninesc); LInfiniteInteger answer =(LInfiniteInteger) ninesc.plus(thistemp); answer = (LInfiniteInteger) answer.plus(new LInfiniteInteger(1)); //Remove carry System.out.println("[ME] Answer's number of digits: " + answer.getNumberOfDigits() + " Ninesc's number of digits: " + ninesc.getNumberOfDigits()); if(answer.getNumberOfDigits() > ninesc.getNumberOfDigits()) { answer.removeFirst(); } System.out.println("[ME] 9's complement + other + 1 number = " + answer.toString()); ninesc = new LInfiniteInteger(""); for(Node tmp = answer.lastNode; tmp != null; tmp = tmp.previous) { ninesc.addfirst(9-tmp.data); } ninesc.removeLast(); System.out.println("[ME] After reverseing again, number = " + ninesc.toString()); answer = (LInfiniteInteger) ninesc.plus(new LInfiniteInteger(1)); //Remove leading 0's if nessessary System.out.println("[ME] Answer's number of digits: " + answer.getNumberOfDigits() + "(" + answer.toString() +") Ninesc's number of digits: " + ninesc.getNumberOfDigits() + "(" + ninesc.toString() + ")"); if(answer.getNumberOfDigits() > ninesc.getNumberOfDigits()) { answer.removeFirst(); } for(Node tmp = answer.firstNode; tmp != null; tmp = tmp.next) { if(tmp.data == 0) { System.out.println("[ME] Removeing a leading 0"); answer.removeFirst(); } else { break; } } System.out.println("[ME] After removeing padded 0's number is " + answer.toString()); if(answer.firstNode == null) { answer.addfirst(0); } //If the final answer has no numbers, add a 0 answer.isNegative = negateAtEnd; System.out.println("[ME] Reversed back, final answer is " + answer.toString()); return answer;