• NYOJ 267 郁闷的C小加(二)


    http://acm.nyist.net/JudgeOnline/problem.php?pid=267

    好烦....

    View Code
      1 #include <stdio.h>
      2 #include <string.h>
      3 #define maxn 1005
      4 char stack[maxn],str[maxn],source[maxn],aim[maxn][10];
      5 double num[maxn],s[maxn];
      6 int main()
      7 {
      8     int i,j,l,k,t,le,rear,f=0,mark,iter;
      9     double a,b,c;
     10     scanf("%d",&t);
     11     while(t--)
     12     {
     13         if(f) printf("\n");
     14         f=1;
     15         scanf("%s",str);
     16         le=strlen(str);
     17         rear=-1;
     18         l=0;
     19         j=0;
     20         mark=0;
     21         iter=0;
     22         for(i=0;i<maxn;i++)
     23         {
     24             s[i]=0;
     25             num[i]=0;
     26         }
     27         for(i=0;i<le;i++)
     28         {
     29             if(str[i]==')')
     30             {
     31                 while(stack[rear]!='(')
     32                 {
     33                     source[l]=stack[rear];
     34                     l++;
     35                     rear--;
     36                 }
     37                 rear--;
     38             }
     39             else if(str[i]=='.' || ('0'<=str[i] && str[i]<='9'))
     40             {
     41                 source[l]='_';
     42                 aim[j][iter++]=str[i];
     43                 if(str[i]=='.')
     44                 {
     45                     mark=1;
     46                     c=0.1;
     47                     continue;
     48                 }
     49                 if(!mark)num[j]=num[j]*10+(str[i]-'0');
     50                 else
     51                 {
     52                     num[j]=num[j]+(str[i]-'0')*c;
     53                     c/=10;
     54                 } 
     55                 if(str[i+1]!='.' && ('0'>str[i+1] || str[i+1]>'9'))
     56                 {
     57                     j++;
     58                     l++;
     59                     aim[j][iter]='\0';
     60                     iter=0;
     61                     mark=0;
     62                 }
     63             }
     64             else if(str[i]=='(')
     65             {
     66                 stack[++rear]=str[i];
     67             }
     68             else if(str[i]=='/' || str[i]=='*')
     69             {
     70                 while(stack[rear]=='/' || stack[rear]=='*')
     71                 {
     72                     source[l]=stack[rear];
     73                     l++;
     74                     rear--;
     75                 }
     76                 stack[++rear]=str[i];
     77             }
     78             else
     79             {
     80                 while(rear>=0 && stack[rear]!='(')
     81                 {
     82                     source[l]=stack[rear];
     83                     l++;
     84                     rear--;
     85                 }
     86                 stack[++rear]=str[i];
     87             }
     88         }
     89         while(rear>=0)
     90         {
     91             source[l]=stack[rear];
     92             l++;
     93             rear--;
     94         }
     95         k=-1;
     96         j=-1;
     97         for(i=0;i<l-1;i++)
     98         {
     99             if(source[i]=='_')
    100             {
    101                 ++k;
    102                 ++j;
    103                 printf("%s",aim[j]);
    104                 s[k]=num[j];
    105             } 
    106             else if(source[i]=='+')
    107             {
    108                 b=s[k];
    109                 a=s[k-1];
    110                 k-=1;
    111                 s[k]=a+b;
    112             }
    113             else if(source[i]=='-')
    114             {
    115                 b=s[k];
    116                 a=s[k-1];
    117                 k-=1;
    118                 s[k]=a-b;
    119             }
    120             else if(source[i]=='*')
    121             {
    122                 b=s[k];
    123                 a=s[k-1];
    124                 k-=1;
    125                 s[k]=a*b;
    126             }
    127             else
    128             {
    129                 b=s[k];
    130                 a=s[k-1];
    131                 k-=1;
    132                 s[k]=a/b;
    133             }
    134             if(source[i]!='_')printf("%c",source[i]);
    135         }
    136         printf("%c\n",source[i]);
    137         printf("%.2lf\n",s[0]);
    138     }
    139     return 0;
    140 }
  • 相关阅读:
    关于字体单位em的问题
    键盘按钮keyCode大全
    右侧导航栏(动态添加数据到list)
    当前页面点击取到值
    前端写分页(用了自己同事写的插件)
    选择控件js插件和使用方法
    Form表单验证
    前端页面跳转并取到值
    App配置页面头部
    json字符串、json对象、数组之间的转换
  • 原文地址:https://www.cnblogs.com/yoru/p/2672530.html
Copyright © 2020-2023  润新知