9101:后缀表达式计算

版权声明:转载商用请通知本人 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;
}

猜你喜欢

转载自blog.csdn.net/qq_41076577/article/details/84567210