文章目录
题目
题目描述
输入一表达式,将其求值后输出。
输入
输入一表达式
输出
输出一个数表示该表达式的值
样例输入
3*(2+5)
样例输出
21
提示
用中缀表达式直接求值。
[C]AC代码
#include<stdio.h>
#include<math.h>
#define maxn 101
int push1(int n,double *p,double v) {
n++;
p[n]=v;
return n;
}
double pop1(int n,double *p) {
return p[n];
}
int push2(int n,char *p,char v) {
n++;
p[n]=v;
return n;
}
int main() {
char str[maxn],stackope[maxn],op;
int nn=0,np=0,i;
double stacknum[maxn],sec,fir;
scanf("%s",str);
for(i=0; str[i]!='@'; i++) {
if(str[i]>='0'&&str[i]<='9')
nn=push1(nn,stacknum,(str[i]-'0')*1.00);
else {
if(np==0) np=push2(np,stackope,str[i]);
else if(str[i]=='(') np=push2(np,stackope,str[i]);
else if(str[i]==stackope[np]) {
sec=pop1(nn,stacknum);
nn--;
fir=pop1(nn,stacknum);
nn--;
if(str[i]=='+') {
nn=push1(nn,stacknum,fir+sec);
}
if(str[i]=='-') {
nn=push1(nn,stacknum,fir-sec);
}
if(str[i]=='*') {
nn=push1(nn,stacknum,fir*sec);
}
if(str[i]=='/') {
nn=push1(nn,stacknum,fir/sec);
}
} else if(str[i]=='+') {
if(stackope[np]=='*') {
sec=pop1(nn,stacknum);
nn--;
fir=pop1(nn,stacknum);
nn--;
nn=push1