zoukankan      html  css  js  c++  java
  • NYOJ128前缀式计算

     

    前缀式计算

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
     
    描述

    先说明一下什么是中缀式:

    如2+(3+4)*5这种我们最常见的式子就是中缀式。

    而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))

    然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )

    把括号去掉就是:+ 2 * + 3 4 5

    最后这个式子就是该表达式的前缀表示。

    给你一个前缀表达式,请你计算出该前缀式的值。

    比如:

    + 2 * + 3 4 5的值就是 37

     
    输入
    有多组测试数据,每组测试数据占一行,任意两个操作符之间,任意两个操作数之间,操作数与操作符之间都有一个空格。输入的两个操作数可能是小数,数据保证输入的数都是正数,并且都小于10,操作数数目不超过500。
    以EOF为输入结束的标志。
    输出
    对每组数据,输出该前缀表达式的值。输出结果保留两位小数。
    样例输入
    + 2 * + 3 4 5
    + 5.1 / 3 7
    样例输出
    37.00
    5.53
    

     1 /* 功能Function Description:        NYOJ-128前缀式计算
     2    开发环境Environment:                DEV C++ 4.9.9.1
     3    技术特点Technique:
     4    版本Version:
     5    作者Author:                        可笑痴狂
     6    日期Date:                        20120804
     7    备注Notes:      
     8 */
     9 #include<cstdio>
    10 #include<stack>
    11 #include<cstring>
    12 #include<cctype>
    13 #include<cstdlib>
    14 using namespace std;
    15 
    16 char s[2000];
    17 int len;
    18 
    19 void cal()
    20 {
    21     int i,t,j,k,n,flag;
    22     char tmp[100];
    23     double a,b;
    24     stack<double> Opnd;
    25     for(i=len-1;i>=0;)
    26     {
    27         if(isdigit(s[i]))
    28         {
    29             j=i;
    30             t=0;
    31             a=0;
    32             n=1;
    33             flag=0;
    34             memset(tmp,'\0',sizeof(tmp));
    35             while(s[i]!=' ')
    36                 --i;
    37             k=i+1;
    38             for(;k<=j;++k)
    39             {
    40                 if(isdigit(s[k]))
    41                 {
    42                     a=a*10+s[k]-'0';
    43                     if(flag)
    44                         n*=10;
    45                 }
    46                 else
    47                     flag=1;
    48             }
    49             Opnd.push(a/n);
    50         }
    51         else if(s[i]==' ')
    52             --i;
    53         else
    54         {
    55             a=Opnd.top();
    56             Opnd.pop();
    57             b=Opnd.top();
    58             Opnd.pop();
    59             switch (s[i])
    60             {
    61                 case '+':
    62                     Opnd.push(a+b);
    63                     break;
    64                 case '-':
    65                     Opnd.push(a-b);
    66                     break;
    67                 case '*':
    68                     Opnd.push(a*b);
    69                     break;
    70                 default:
    71                     Opnd.push(a/b);
    72                     break;
    73             }
    74             --i;
    75         }
    76     }
    77     printf("%.2lf\n",Opnd.top());
    78 }
    79 
    80 int main()
    81 {
    82     while(gets(s))
    83     {
    84         len=strlen(s);
    85         cal();
    86     }
    87     return 0;
    88 }
     1 //代码二:------神一般的代码----不过只能测试一组测试数据,要改成多组不会改
     2 #include <stdio.h>
     3 #include<math.h>
     4 #include<stdlib.h>
     5 
     6 double exp()
     7 {
     8     char a[10];
     9     scanf("%s", a);
    10     switch(a[0])
    11     {
    12         case'+': return exp( ) + exp( );
    13         case'-': return exp( ) - exp( );
    14         case'*': return exp( ) * exp( );
    15         case'/': return exp( ) / exp( );
    16         default: return atof(a);
    17     }
    18 }
    19 int main()
    20 {
    21     double ans;
    22     ans=exp();
    23     printf("%.2f\n", ans);
    24     return 0;
    25 }
    功不成,身已退
  • 相关阅读:
    读书笔记之理想设计的特征
    一些javascript 变量声明的 疑惑
    LINQ 使用方法
    Google MySQL tool releases
    读书笔记之设计的层次
    EF之数据库连接问题The specified named connection is either not found in the configuration, not intended to be used with the Ent
    转载 什么是闭包
    javascript面向对象起步
    Tips
    数据结构在游戏中的应用
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2622817.html
Copyright © 2011-2022 走看看