洛谷P1981 表达式求值 C++题解-编程题目及题解论坛-编程-擎雷博客

洛谷P1981 表达式求值 C++题解

原题链接(洛谷):https://www.luogu.com.cn/problem/P1981

原题Markdown:

# [NOIP2013 普及组] 表达式求值

## 题目描述

给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。

## 输入格式

一行,为需要你计算的表达式,表达式中只包含数字、加法运算符 “$+$” 和乘法运算符 “$ \times $”,且没有括号,所有参与运算的数字均为 $0$ 到   $2^{31}-1$ 之间的整数。  

输入数据保证这一行只有 $ 0-9$、$+$、$ \times $ 这 $12 $种字符。

## 输出格式

一个整数,表示这个表达式的值。  

注意:当答案长度多于 $4$ 位时,请只输出最后 $ 4$ 位,前导 $ 0$ 不输出。

## 样例 #1

### 样例输入 #1

```
1+1*3+4
```

### 样例输出 #1

```
8
```

## 样例 #2

### 样例输入 #2

```
1+1234567890*1
```

### 样例输出 #2

```
7891
```

## 样例 #3

### 样例输入 #3

```
1+1000000003*1
```

### 样例输出 #3

```
4
```

## 提示

对于 $30\%$ 的数据,$0≤$ 表达式中加法运算符和乘法运算符的总数 $≤100$。

对于 $80\%$ 的数据,$0≤$ 表达式中加法运算符和乘法运算符的总数 $≤1000$。

对于 $100\%$ 的数据,$0≤$ 表达式中加法运算符和乘法运算符的总数 $≤100000$。

题解:

#include<stack> //栈的头文件 
#include<iostream> //函数库 
using namespace std;
stack <int> s; //栈 
int sum;//求答案的 
char b; //‘*’和‘+’的输入 
int f; //代替值的变量 
int a,c; //输入的整数 
int main(){//主函数 
	cin>>a; //先输入 
	a=a%10000; //直接取余 
	s.push(a); //放入栈里 
	while(cin>>b>>c){ //输入符号和后面的数字 
		if(b=='*'){ //判断为什么符号 
			f=s.top(); //先拿一个存值 
			s.pop(); //在栈中取出 
			s.push(f*c%10000); //乘后放进栈且求余 
		}
		else s.push(c); //是加法直接放进去 
	}
	while(s.size()){ //循环栈的深度 
		sum+=s.top() ; //求加法 
		sum%=10000; //求余 
		s.pop(); //将栈顶去除 
	}
	cout<<sum<<endl; //输出最后的值 
	return 0; //撒花 
}

制作不易,所有代码及注释均本人编写,求给好评~~~

希望对你有所帮助~~~

请登录后发表评论