zoukankan      html  css  js  c++  java
  • 逆波兰表达式

    总时间限制: 1000ms
    内存限制: 65536kB
    描述
    逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系,也不必用括号改变运算次序,例如(2 + 3) * 4的逆波兰表示法为* + 2 3 4。本题求解逆波兰表达式的值,其中运算符包括+ - * /四个。
    输入
    输入为一行,其中运算符和运算数之间都用空格分隔,运算数是浮点数。
    输出
    输出为一行,表达式的值。
    可直接用printf("%f ", v)输出表达式的值v。
    样例输入
    * + 11.0 12.0 + 24.0 35.0
    样例输出
    1357.000000
    提示
    可使用atof(str)把字符串转换为一个double类型的浮点数。atof定义在math.h中。
    此题可使用函数递归调用的方法求解。
    来源
    计算概论05
    這個題名義上是棧練習,其實用遞歸就能簡單解決。
    代碼實現:
     1 #include<cstdio>
     2 #include<cstring>
     3 using namespace std;
     4 char ch[30];
     5 double ans;
     6 double nbl(){
     7     scanf("%s",&ch);
     8     if(ch[0]>='0'&&ch[0]<='9'){
     9         int l=strlen(ch),i;
    10         double a=0,b=1;
    11         for(i=0;i<l;i++){
    12             if(ch[i]=='.') break;
    13             a*=10;
    14             a+=ch[i]-'0';
    15         }
    16         for(i+=1;i<l;i++){
    17             b/=10;
    18             a+=(ch[i]-'0')*b;
    19         }
    20         return a;
    21     }
    22     else{
    23         if(ch[0]=='+') return nbl()+nbl();
    24         if(ch[0]=='-') return nbl()-nbl();
    25         if(ch[0]=='*') return nbl()*nbl();
    26         if(ch[0]=='/') return nbl()/nbl();
    27     }
    29 }
    30 int main(){
    31     ans=nbl();
    32     printf("%f
    ",ans);
    33     return 0;
    34 }

    。。。

  • 相关阅读:
    VC字符串输出对齐问题(转)
    木马免杀全攻略(转)
    Windows Vista自动重启问题解决方法(转)
    图说VSS 6.0构架版本控制系统解决方案(转)
    几个有用的链接
    X64 Windows 2003 及XP 语言包官方下载
    .NET 3.5的版本问题(转)
    设计模式读书笔记工厂方法模式
    设计模式读书笔记装饰者模式
    设计模式读书笔记简单工厂模式
  • 原文地址:https://www.cnblogs.com/J-william/p/6193795.html
Copyright © 2011-2022 走看看