求解逆波兰式(求后缀表达式)

求解逆波兰式(求后缀表达式)(含+ - × ÷)

先上源代码

// An highlighted block
#include<cstdio>
#include<cstring>
#include<string>


using namespace std;
#define maxSize 50
int j = 0;
int main()
{
	double cal(double exp[], int k);//计算函数
	double op(double a, char Op, double b);
	char infix[maxSize];
	gets_s(infix);
	double s[maxSize] = {0};
	int k = strlen(infix); 
	for (int i = 0; i < k; ++i)
	{

		if (infix[i] != ' ') 
		{
			if (infix[i] <= '9' && infix[i] >= '0')
			{
				while (infix[i] != ' ' && infix[i] != '\0')//用空格区分5010这种情况:50 10
				{
					s[j] = 10 * s[j] + infix[i] - '0';
					++i;
				}
				--i;
				++j;
			}
			else if (infix[i] != '\0')
			{
				s[j++] = infix[i]-'0';
			}
		}
	}
	printf("%.2f", cal(s, k));
	return 0;
}
double op(double a, char Op, double b)//运算函数 
{
	if (Op == '+') return a + b;
	if (Op == '-') return a - b;
	if (Op == '*') return a * b;
	if (Op == '/')//题目是非负整数
	{
		if (b == 0)
		{
			printf("error\n");
			return 0;
		}
		else
			return a / b;
	}
}
double cal( double exp[], int k)//后缀式计算函数 
{
	int i, temp=0;
	double a, b, c;
	double stack[maxSize]; int top = -1;

	char Op;
	for (i = 0; i <j ; ++i)
	{
		if (exp[i] < 0)//为符号
		{
			Op = exp[i]+'0';
			b = stack[top--];
			a = stack[top--];//后进先出
			c = op(a, Op, b);
			stack[++top] = c;
		}
		else {
			stack[++top] = exp[i];
		}
	}
	return stack[top];
}

输入样例

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值