算法训练 前缀表达式(蓝桥杯)

来源:互联网 发布:淘宝网电脑版官方下载 编辑:程序博客网 时间:2024/05/10 17:33

 算法训练 前缀表达式  

时间限制:1.0s   内存限制:512.0MB

问题描述

  编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。
  输入格式:输入只有一行,即一个前缀表达式字符串。
  输出格式:输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。
  输入输出样例

样例输入

+ 5 2

样例输出

7
 

ps:http://lx.lanqiao.org/problem.page?gpid=T225

谁能告诉我,错哪了。。。。。。无爱了!

复制代码
#include<stdio.h>#include<stack>#include<string.h>using namespace std;stack<int> s;void fun(char op){ //   printf("%c\n",op);    int x,y;    if(s.empty()) return ;    x=s.top();    s.pop(); //   printf("%d\n",x);    if(s.empty()) return ;    y=s.top();    s.pop(); //   printf("x=%d,y=%d\n",x,y);    switch(op)    {        case'+':x+=y; break;        case'-':x-=y; break;        case'*':x*=y; break;        case'/':x/=y; break;    }    s.push(x);}char ch[10005];int main(){    int len,x,y;    gets(ch);//    printf("%s\n",ch);    len=strlen(ch);//    printf("%d\n",len);    for(int i=len-1;i>=0;i--)    {        if(ch[i]==' ') continue; //       printf("%c",ch[i]);        if(ch[i]>='0'&&ch[i]<='9')        {            int xx=ch[i]-'0';            s.push(xx);        }        else if(ch[i]=='+') fun(ch[i]);        else if(ch[i]=='-') fun(ch[i]);        else if(ch[i]=='*') fun(ch[i]);        else if(ch[i]=='/') fun(ch[i]);    }    if(!s.empty())    printf("%d\n",s.top());    s.pop();    return 0;}
复制代码

 

 然后网上搜了一下,我更加无语了。。。。。。。。。。
复制代码
#include<iostream>#include<cstdio>using namespace std;int main(){    char c;    int n,m;    scanf("%c",&c);    scanf("%d%d",&n,&m);    if(c=='+')        printf("%d\n",n+m);    if(c=='-')        printf("%d\n",n-m);    if(c=='*')        printf("%d\n",n*m);    if(c=='/')        printf("%d\n",n/m);    return 0;}
复制代码

这代码居然能过。。。。。

 

 

大神们快来拯救我。帮我看下代码;

0 0