首页 > 其他 > 详细

一本通1331后缀表达式的值(目前不知错误原因)

时间:2020-04-01 00:11:32      阅读:163      评论:0      收藏:0      [点我收藏+]

【题目描述】

从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要判断给你的表达式是否合法。以@作为结束标志。

比如,16–9*(4+3)转换成后缀表达式为:16□9□4□3□+*–,在字符数组A中的形式为:

技术分享图片

栈中的变化情况:

技术分享图片

运行结果:-47

提示:输入字符串长度小于250,参与运算的整数及结果之绝对值均在2^64范围内,如有除法保证能整除。

【输入】

一个后缀表达式。

【输出】

一个后缀表达式的值。

【输入样例】

16 9 4 3 +*-@

【输出样例】

-47

代码:


#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
long long stack[257];
char s[256];
long long comp(char s[256])//函数
{
long long i=0,top=0,x,y;
while(i<=strlen(s)-2)//除去‘0’和‘@’,所以减2
{
switch(s[i])
{
case‘+‘:stack[--top]+=stack[top+1];break;//如果是“+”号,那么指针下移一个,然后当前指针指的数加上上一个数,以下同理
case‘-‘:stack[--top]-=stack[top+1];break;
case‘*‘:stack[--top]*=stack[top+1];break;
case‘/‘:stack[--top]/=stack[top+1];break;
default:x=0;while(s[i]!=‘ ‘) x=x*10+s[i++]-‘0‘;//如果不是运算符,那么当这是一个数时(没有空格),那就要乘以十,就是左移一位,可以这么理解:原来的数后面跟了一个数(其实是一个数),那么前面的数就要乘以十再加上后面的数,才能凑到正确的数值(自己算一算就行,想一想应该能明白)
stack[++top]=x;break;//因为加了一个数,那么指针就要往上指一下,并等于这个数
}
i++;//找下一个
}
return stack[top];//返回最后的值
}
int main()
{
gets(s);
cout<<comp(s);
return 0;
}

 

不知道哪里做错了,我一定会回来改的!

一本通1331后缀表达式的值(目前不知错误原因)

原文:https://www.cnblogs.com/57xmz/p/12609543.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!