zoukankan      html  css  js  c++  java
  • c语言实现逆波兰表达式!

    C语言实现逆波兰表达式(栈的应用)

     #include<iostream>
     #include<cstdio>
     using namespace std;
     const int MAXSIZE = 110;
     char a[MAXSIZE];
     double operNum[MAXSIZE];
     ​
     double getSum(int* i){//地址传递,可以在边求值时边改变i的原值。如若是值传递,会导致值的重复算
      double sum = 0.0;
      int k = 0;
      while(a[*i] >= '0' && a[*i] <= '9'){
      sum = sum * 10 + a[*i] - '0';
      (*i)++;
      }
      if(a[*i] == '.'){
      (*i)++;
      while(a[*i] >= '0' && a[*i] <= '9'){
      sum = sum * 10 + a[*i] - '0';
      (*i)++;
      k++;
      }
      }
      while(k!=0){
      sum /= 10;
      k--;
      }
      return sum;
     }
     int main(){
      gets(a);//这样可以读入空格,要求以'#'结尾
     
      int i=0;
      int top=0;
      double x1,x2;
      while (a[i] != '#'){
      if(a[i] >= '0' && a[i] <= '9'){
      double f = getSum(&i);
      operNum[top++] = f;
      }else if(a[i] == ' '){
      i++;
      }else if(a[i] == '+'){
      x1 = operNum[--top];
      x2 = operNum[--top];
      operNum[top++] = x1 + x2;
      i++;
      }else if(a[i] == '-'){
      x1 = operNum[--top];
      x2 = operNum[--top];
      operNum[top++] = x2 - x1;
      i++;
      }else if(a[i] == '*'){
      x1 = operNum[--top];
      x2 = operNum[--top];
      operNum[top++] = x1 * x2;
      i++;
      }else if(a[i] == '/'){
      x1 = operNum[--top];
      x2 = operNum[--top];
      operNum[top++] = x2 / x1;
      i++;
      }
      }
     
      cout<<operNum[0]<<endl;
      return 0;
     }

     

  • 相关阅读:
    编程心得
    PC缺少一个或多个网络协议 qq可登录(win10)
    系统启动和内核管理
    实现Internet架构的dns解析
    文本处理三剑客之AWK
    SHELL脚本编程进阶
    网络协议和管理笔记
    基础知识
    进程和计划任务
    710
  • 原文地址:https://www.cnblogs.com/yuanshixiao/p/14538351.html
Copyright © 2011-2022 走看看