版权声明:转载商用请通知本人 https://blog.csdn.net/qq_41076577/article/details/84567210
Problem Description
规则如下:式中不包含括号,运算符放在两个操作数的后面,所有的计算按运算符出现的顺序,严格从左向右进行,不再考虑运算符的优先级,如:(2 + 1) * 3,在此处即表示为2 1 + 3 *
请编程,计算后缀表达式的值。
Input
输入数据有多组,每组数据占一行,代表一个后缀表达式,每行不超过50个字符;
每行由多个元素(操作数,运算符,终结符)组成,每两个元素之间有一个空格;
后缀表达式当中:
操作数:是一整数字符串,长度不超过5;
运算符范围:+,-,*,/
终结符:#,该符号代表表达式的终结;
假设没有不规范的后缀表达式。
Output
每组输出数据占一行,输出后缀表达式的计算结果。
Sample Input
2 1 + 3 * # 2 10 3 * + # 7 2 6 9 * + / #
Sample Output
9 32 0.125
Hints
操作数字符串转换为数值存储时,应定义为double类型; 注意计算结果的输出格式。
Author
hdf
Recommend
zh
输入数据怎么避开数之间的空格,输入的时候,
而且多数据输入
scanf("%[^\n]",a);
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{
char a[1000];
int i;
double b[1000],n,s;
scanf("%[^\n]",a);
n=strlen(a);
int j=-1;
for(i=0;i<n;i++)
if(a[i]>='0'&&a[i]<='9')
{
b[++j]=a[i]-'0';
}
else if(a[i]=='+')
{
s=b[j-1]+b[j];
b[--j]=s;
}
else if(a[i]=='-')
{
s=b[j-1]-b[j];
b[--j]=s;
}
else if(a[i]=='*')
{
s=b[j-1]*b[j];
b[--j]=s;
}
else if(a[i]=='/')
{
s=b[j-1]/b[j];
b[--j]=s;
}
else if(a[i]=='#')
printf("%.lf\n",b[0]);
return 0;
}