読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

逆ポーランド記法

1 3 + 5 / 2 - 3 += 1.8のような式を計算する。整数の四則演算のみ対応。
RPN Calculator

function calculateRPN(expression) {
  var result = 0;
  var stack = [];
  var i, c, n, m, x, y;
  var zero = 48, nine = 54;
  for (i = 0; i < expression.length; ++i) {
    c = expression.charAt(i);
    n = expression.charCodeAt(i);
    if (n >= zero && n <= nine) {
      m = 0;
      do {
        m = m*10 + n-zero;
        ++i;
        c = expression.charAt(i);
        n = expression.charCodeAt(i);
      } while (n >= zero && n <= nine);
      stack.push(m);
    } else if (c != " ") {
      x = stack.pop();
      y = stack.pop();
      if (c == "+") stack.push(y + x);
      else if (c == "-") stack.push(y - x);
      else if (c == "*") stack.push(y * x);
      else if (c == "/") stack.push(y / x);
      else throw new Error("Unrecognized character: " + c + " at " + i);
    }
  }
  if (stack.length) {
    return stack.pop();
  } else {
    throw new Error("Stack is empty.");
  }
}