當BigInteger大於Integer.MAX_VALUE時,我正在綁定引發異常。它不會允許我爲指數情況拋出異常。我不確定如何在biginteger值太大而無法傳入BigInteger.pow()方法時拋出異常。BigInteger.pow()與BigInteger
在此先感謝。
這裏是toPostfix方法:
public BigInteger evalPostfix(String postfix){
BigInteger a, b;
Stack stack = new Stack();
for(int i=0; i<postfix.length(); i++){
if(this.isOp(postfix.charAt(0)))
throw new ArithmeticException("Malformed Postfix Expression");
switch(postfix.charAt(i)){
case '+':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
stack.push(b.add(a));
break;
case '-':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
stack.push(b.subtract(a));
break;
case '*':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
stack.push(b.multiply(a));
break;
case '/':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
if(a == BigInteger.valueOf(0)){
throw new ArithmeticException("Cannot divide by 0");
}else{
stack.push(b.divide(a));
}
break;
case '%':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
stack.push(b.mod(a));
break;
case '^':
a = (BigInteger)stack.pop();
b = (BigInteger)stack.pop();
if(b.compareTo(BigInteger.valueOf(Integer.MAX_VALUE)) > 0)
throw new ArithmeticException("BigInteger value is too large");
stack.push(a.pow(b.intValue()));
break;
default:
if(this.numbers.get(postfix.substring(i, i+1)) == null)
throw new NullPointerException(postfix.substring(i, i+1) + " is not mapped to any value");
stack.push(this.numbers.get(postfix.substring(i,i+1)));
}
}
return (BigInteger)stack.pop();
}
可能的重複[你如何提高Java BigInteger的BigInteger的力量,而不做模運算?](http://stackoverflow.com/questions/2839262/how-do-you-raise-a-java -biginteger-the-power-of-biginteger-without-doing-mod) – finnw 2011-01-30 21:11:49