1. 程式人生 > >9101:字尾表示式計算

9101:字尾表示式計算

 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;
}