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

林晴比古さんのコードが長くて読むのがたいへん

C/C++ Algorithms

林晴比古さんのC言語による実用アルゴリズム入門読んでいて、電卓プログラム、まねして作ろうかなと思って書き始めたら長くて2ページ目で断念。以前からよく眺めていた、ohahirokiさんの電卓プログラムを頭の中で考えながら簡単な電卓プログラムを実装してみた

char e[128];
int p;

int exp();
int term();
int fact();

int exp(){
  int ret = term();
  while(e[p] == '+' || e[p] == '-'){
    if(e[p] == '+'){
      p++;
      ret += term();
    }else if(e[p] == '-'){
      p++;
      ret -= term();
    }
  }
  return ret;
}

int term(){
  int ret = fact();
  while(e[p] == '*' || e[p] == '/'){
    if(e[p] == '*'){
      p++;
      ret *= fact();
    }else if(e[p] == '/'){
      p++;
      ret /= fact();
    }
  }
  return ret;
}

int fact(){
  int ret = 0;
  if(e[p] == '('){
    p++;
    ret = exp();
    p++;
  }
  while(isdigit(e[p])){
    ret = ret * 10 + e[p] - '0';
    p++;
  }
  return ret;
}

int main(){
  int n;
  scanf("%d", &n);
  while(n--){
    scanf("%s", e);
    p = 0;
    printf("%d\n", exp());
  }
  return 0;
}

バッククオート三つに言語の名前でソースコードのシンタックスハイライトができるんですね。

C言語による実用アルゴリズム入門

C言語による実用アルゴリズム入門

アルゴリズムパズル ―プログラマのための数学パズル入門

アルゴリズムパズル ―プログラマのための数学パズル入門