栈的应用expr(表达式求值)!给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 10

求大神帮忙!1197:expr(表达式求值)题目描述给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。输入输入仅有一行,为需要你计算的表达式,表达式中只包含数... 求大神帮忙!
1197: expr(表达式求值)
题目描述
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符"+"和乘法运算符"*",且没有括号,所有参与运算的数字均为0到231-1之间的整数。输入数据保证这一行只有0~ 9、+、*这12种字符。
输出
输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于4位时,请只输出最后4位,前导0不输出。
样例输入
1+1*3+4
样例输出
8
求程序
Pascal语言编程问题
展开
 我来答
jimmy14888888
推荐于2017-11-27 · TA获得超过1340个赞
知道小有建树答主
回答量:550
采纳率:80%
帮助的人:353万
展开全部

利用乘法先运算的性质,把压入栈的乘法先运算最后再算加法就好了:

#include <iostream>
#include <sstream>
#include <stack>
using namespace std;
const int MaxLen = 4096;
char expr[MaxLen];
int main()
{
stack<int> num;
cin.getline(expr, MaxLen);
stringstream e(expr);
int n;
char o;
e >> n;
num.push(n);
while (e >> o >> n)
{
if (o == '+')
num.push(n);
else //(o == '*')
{
int v = num.top();
num.pop();
num.push((v * n) % 10000);
}
}
int ans = 0;
while (!num.empty())
{
ans += num.top();
num.pop();
}
cout << (ans % 10000) << endl;
return 0;
}
更多追问追答
追问
不好意思,我需要是Pascal语言,抱歉没有说清楚
追答
一样的思路,

这样做:
1,读入第一个数字n,把它压入栈
2,读入一个运算符o和数字n,
如果o是+,将n放入栈

如果o是*,取出栈顶元素v,然后将v*n的结果放入栈
3,重复第二步直到读取完毕
4,取出栈内所有元素并累加,即是答案
匿名用户
2016-05-02
展开全部
转载pascal吧吧主解答:
program expr(input,output);
var n,a,b:longint;ch:char;
begin
assign(input,'expr.in');
reset(input);
assign(output,'expr.out');
rewrite(output);
a:=0;
n:=0;
b:=1;
while not(eoln) do
begin
read(ch);
if ch='+' then
begin
b:=(b*n) mod 10000;
n:=0;
a:=(a+b) mod 10000;
b:=1;
continue;
end;
if ch='*' then
begin
b:=(b*n) mod 10000;
n:=0;
continue;
end;
n:=(n*10+ord(ch)-48) mod 10000;
end;
b:=(b*n) mod 10000;
a:=(a+b) mod 10000;
writeln(a);
writeln();
close(input);
close(output);
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式