【C/C++/Pascal】中缀表达式求值


题目

题目描述

输入一表达式,将其求值后输出。

输入

输入一表达式

输出

输出一个数表示该表达式的值

样例输入

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值