前缀表达式 (8 分)
编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。
输入格式:
输入只有一行,即一个前缀表达式字符串。
输出格式:
输出相应的计算结果(如果是除法,直接采用c语言的“/”运算符,结果为整数)。
输入样例:
在这里给出一组输入。例如:
- 5 2
输出样例:
在这里给出相应的输出。例如:
7
题外话:
狗贼,我还以为是整个的前缀式子求解,而且也没看见说每个数是不大于10的整数,所以就一直再出错,然后发现只是按他的格式:运算符 对象1 对象2,F**K!!!,算了,我也把之前写的前缀式子贴上把,毕竟都差不多。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void){
char x;
int a,b,c;
scanf("%c %d %d",&x,&a,&b);
//printf("%c%d%d",x,a,b);
if(x=='+')
c=a+b;
if(x=='-')
c=a-b;
if(x=='*')
c=a*b;
if(x=='/')
c=a/b;
printf("%d",c);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(void){
char ch[100],str[100];
gets(ch);
int j=0;
for(int i=0;i<strlen(ch);i++){
if(ch[i]!=' ')
str[j++]=ch[i];
}
int st[100];int k=0;
for(int i=j-1;i>=0;i--){
if(str[i]<='9'&&str[i]>='0'){
st[k++]=str[i]-'0';
}
else {
if(str[i]=='+'){
int a=st[k-1];
int b=st[k-2];
k-=2;
st[k++]=a+b;
}
else if(str[i]=='-'){
int a=st[k-1];
int b=st[k-2];
k-=2;
st[k++]=a-b;
}
else if(str[i]=='*'){
int a=st[k-1];
int b=st[k-2];
k-=2;
st[k++]=a*b;
}
else if(str[i]=='/'){
int a=st[k-1];
int b=st[k-2];
k-=2;
st[k++]=a/b;
}
}
}
printf("%d",st[0]);
return 0;
}