zoukankan      html  css  js  c++  java
  • 南阳 oj 表达式求值 题目35 数据结构 NYO题目链接

    

    建议不会的看别人的代码自己在之上模拟一遍,仅仅要耐心模拟就会做出来

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?

    pid=35
     

    #include<stdio.h>
     #include<string.h>
     #include<stdlib.h>
     #define N 1000
     using namespace std;
     char s[N];//存储字符串 
    char str1[N];//存储'o'-到'9'的字符 
    char str2[N];//存储运算符 
    int top1,top2;//利用数组模拟栈 
    int compare(char x)//优先级比較 
    {
      switch(x)
      {
       case '+' :
       case '-' :return 1;
       case '*' :
       case '/' :return 2;
       case '(' :return 0;
       default: return -1; 
      }
     }
     void zhuan()//转换 
    {
      int k;
      top1=-1,top2=-1;//初始化头 
     scanf("%s",s);
      k=strlen(s);
      for(int i=0;i<k;i++)
      {
       if(s[i]>='0'&&s[i]<='9'||s[i]=='.')//假设是数字进去str1数组中 
      {
        top1++;
        str1[top1]=s[i];
          }
       else if(s[i]=='(')//假设是'('进入str2中 
      {
        top2++;
        str2[top2]=s[i];
          }
       else if(s[i]==')')//假设是')'说明str2中有运算符 
      {
        while(str2[top2]!='(')
        {
         top1++;
         str1[top1]=' ';
         top1++;
         str1[top1]=str2[top2];
         top2--;
        }
        top2--;//把'('出去 
      }
          else if(s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')//假设是运算符比較优先级 
      {
         top1++;
         str1[top1]=' ';
         while(compare(s[i])<=compare(str2[top2]))//假设s[i]优先级低于之前也就是str2中的运算符  把str2中的运算符给str1 
         {
          top1++;
        str1[top1]=str2[top2];
        top1++;
        str1[top1]=' ';
        top2--;
         }
         top2++;
         str2[top2]=s[i];//假设str2高进入str2 
          }
      }
      while(top2!=-1)//将剩余的进入str1中 
     {
       top1++;
       str1[top1]=' ';
       top1++;
       str1[top1]=str2[top2];
       top2--;
      }
      top1++;
      str1[top1]=' ';
      top1++;
      str1[top1]='=';
      top1++;
      str1[top1]='';
     } 
     void sum()//计算 
    {
      double a1,a2,d[N];
      char ch;
      char s1[100],st[N];
      int k,t=-1;
      for(int i=0;i<top1;i++)
      {
       k=0;
       ch=str1[i];
       while(str1[i]!=' ')
       {
        if(str1[i]=='=') break;
        s1[k++]=str1[i];
        i++;
       }
       if(ch>='0'&&ch<='9')
       {
        s1[k]='';
        t++;
        d[t]=atof(s1);
       }
       else
       {
        switch(ch)
        {
         case '+' :
          a2=d[t];
          t--;
          a1=d[t];
          t--;
          t++;
          d[t]=a1+a2;
          break;
         case '-' :
          a2=d[t];
          t--;
          a1=d[t];
          t--;
          t++;
          d[t]=a1-a2;
          break;
         case '*' :
          a2=d[t];
          t--;
          a1=d[t];
          t--;
          t++;
          d[t]=a1*a2;
          break;
         case '/' :
          a2=d[t];
          t--;
          a1=d[t];
          t--;
          t++;
          d[t]=a1/a2;
          break;
         default : break;
        }
       }
      }
      printf("%.2lf
    ",d[t]);
     }
     main()
     {
      int n;
      scanf("%d",&n); 
      while(n--)
      {
       zhuan();
       sum(); 
      } 
     } 


     

  • 相关阅读:
    uniapp 请求附近地址列表
    uniapp 图片视频上传
    城市定位
    日历签到
    uniapp拼团倒计时函数
    时间过滤器
    倒计时函数
    vuex的使用
    毛玻璃效果
    Pullword 中文分词
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6844366.html
Copyright © 2011-2022 走看看