后缀表达式计算
来源:互联网 发布:mysql qidong 编辑:程序博客网 时间:2024/05/19 14:00
利用栈完成后缀表达式的计算(1043)
Time limit(ms): 1000
Memory limit(kb): 10000
Submission: 384
Accepted: 235
Accepted
后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将后缀表达式的结果计算出来。
Description
后缀表达式。以#号作为表达式结束标志。为了简单,处理的数据为0-9的整数。
Input
计算结果。
Output
1
3 6 6 2 / - 3 * +#
Sample Input
1
12
Sample Output
#include<stdio.h>
#include<string.h>#include<stdlib.h>
int main()
{
void res();
res();
return 0;
}
void res()
{
void caculate(char str[]);
int i=0;
char ch;
char str[100];
while(1)
{
scanf("%c",&ch);
if(ch=='#')
break;
else
{
if(ch!=' ')
{
str[i]=ch;
i++;
}
}
}
str[i]='\0';
// printf("%s",str);
caculate(str);
}
void caculate(char str[])
{
double stack[100];
int len=strlen(str);
int i,j=0;
double a,b,c;
for(i=0;i<len;i++)
{
if(str[i]>='0' && str[i]<='9')
{
stack[j]=str[i]-'0';
j++;
}
if(str[i]=='+')
{
j--;
a=stack[j];
j--;
b=stack[j];
c=a+b;
stack[j]=c;
j++;
}
else if(str[i]=='-')
{
j--;
a=stack[j];
j--;
b=stack[j];
c=b-a;
stack[j]=c;
j++;
}
else if(str[i]=='*')
{
j--;
a=stack[j];
j--;
b=stack[j];
c=a*b;
stack[j]=c;
j++;
}
else if(str[i]=='/')
{
j--;
a=stack[j];
j--;
b=stack[j];
c=b/a;
stack[j]=c;
j++;
}
}
printf("%g",stack[j-1]);
}
利用栈后进先出。。当遇到运算符的时候,栈顶开始退后两位计算结果再入栈
0 0
- 计算后缀表达式
- 计算后缀表达式
- 后缀表达式计算
- sicily 后缀表达式计算
- 后缀表达式计算
- 后缀表达式的计算
- 后缀表达式的计算
- 后缀表达式计算
- 后缀表达式计算
- 后缀表达式的计算
- 计算后缀表达式
- 后缀表达式计算结果
- 后缀表达式计算
- 后缀表达式的计算
- 后缀表达式的计算
- 1005. 后缀表达式计算
- 1005. 后缀表达式计算
- 后缀表达式的计算
- 商用的码流分析工具/YUV viewer
- JavaScript 学习1
- Effective Java 阅读笔记
- 仿超级课程表的课程界面设计
- 这逗B货,让人越来越看不懂
- 后缀表达式计算
- List 中添加多个List集合以及add() 与addAll()的区别
- java正则表达式
- vlc web 插件 js接口
- python获取对象信息
- 【动态规划+滚动数组】Interleaving String
- 有个2B同事,上班绝对不枯燥
- ubuntu下eclipse整合tomcat(软链接LN)
- 第五周项目三——用多文件组织多个类的程序