24h購物| | PChome| 登入
2009-01-09 19:31:50| 人氣2,518| 回應0 | 上一篇 | 下一篇

後序運算式

推薦 0 收藏 0 轉貼0 訂閱站台

此解答為考慮多位數、負數。並用空格隔開。

 

範例輸入:

3 5 +

35 4 * 5 +

範例輸出:

8.000

145.000

/***************************************/

#include<stdio.h>                    
#include<stdlib.h>        
#include<string.h>        
#include<math.h>         
main()        
{        
 long long int a,b=0,c;  
 int temp=0,flag=1;        
 char x[9999];         
 float y[9999];        
  while(gets(x))        
  {        
   for(a=0;a<strlen(x);a++)       
    {        
     switch(x[a])        
      {        
       case '+': y[b-2]=y[b-2]+y[b-1];y[b-1]=0;b=b-2;break;        
       case '-': {
                  if(x[a+1]!=' '&&a!=strlen(x)-1 )/*代表後面有數字 負數*/
                   {flag=-1;}
                  else        
                   {y[b-2]=y[b-2]-y[b-1];y[b-1]=0;b=b-2;}
                   break;
                  }    /*因為退兩2格 所以要刪掉第2格的數字 不然會累加 空格要退2格*/ 
       case '*': y[b-2]=y[b-2]*y[b-1];y[b-1]=0;b=b-2;break;        
       case '/': y[b-2]=y[b-2]/y[b-1];y[b-1]=0;b=b-2;break;        
       case ' ': {y[b]=y[b]*flag;b++;flag=1;break;}  
       default:y[b]=y[b]*10+x[a]-48;
      }
    }          
    printf("%.3f\n",y[0]);        
    b=0;y[0]=0;         
  }           
  return 0;            
}

台長: 來源不明
人氣(2,518) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊小題目 |
此分類下一篇:阿波的愛心
此分類上一篇:反轉表

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文