問題二

Q2.計算機問題

  寫一支能夠計算四則運算的計算機。你可以假設每個數字皆不大於1000,只有+、-、*、/四種符號,沒有括號。數字個數小於50。

輸入
運算式(每個數字及符號間有一個空格區隔)
輸出
結果


範例輸入
3 – 5 * 6
範例輸出
-27


解題關鍵

先乘除,後加減。這是我去考試那一次雖然知道但卻忘記把這他寫進去,哭哭。

今天我累了,晚安大家。

程式碼參考

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
   long int i,j,k=0,l=0,o,ans=0;
   long int m[49]={0};
   long int n[50]={0};
   long int c[5];
   i=getchar();
   j=0;
   while(i!=EOF){
     
     if(i==10){
               
        switch(c[0]){case -1:
                              m[k]=4;k++;j=0;
                              break;
                         case -3:
                              m[k]=2;k++;j=0;break;
                         case -5:
                              m[k]=1;k++;j=0;break;
                         case -6:
                              m[k]=3;k++;j=0;break;

                         default:       
                              for(o=0;o<j;o++){
                                 n[l]=n[l]*10+c[o];
                              }
                              l++;j=0;
                              
                              break;
                         
                         }       
              
       for(o=0;o<k;o++){
       
          if(m[o]==3){
          m[o]=0;
          n[o+1]=n[o+1]*n[o];
          n[o]=0;                     
          }              
       
       }
       
       for(o=0;o<k;o++){
       
          if(m[o]==4){
          m[o]=1;
          n[o+1]=n[o]/n[o+1];
          n[o]=0;                     
          }              
       
       }
       
       if(m[0]==0)m[0]=1;
       
       for(o=1;o<k;o++){       
          if(m[o]==0)m[o]=m[o-1];
       } 
        
       ans=n[0];
       
       for(o=0;o<k;o++){
          
          if(m[o]==1){
              ans+=n[o+1];
          }else{
              ans-=n[o+1];
          }             
       
       }      
       
       printf("%ld\n",ans);       
       k=l=ans=0;
       
       for(i=0;i<49;i++){
       m[i]=n[i]=0;}
       n[50]=0;
       
       }else{
     
          if(i==32){
            
            switch(c[0]){case -1:
                              m[k]=4;k++;j=0;break;
                         case -3:
                              m[k]=2;k++;j=0;break;
                         case -5:
                              m[k]=1;k++;j=0;break;
                         case -6:
                              m[k]=3;k++;j=0;break;
                         
                         default:       
                              for(o=0;o<j;o++){
                                 n[l]=n[l]*10+c[o];
                              }
                              l++;j=0;
                              break;
                         
                         }
            
            
                  
        }else{
        c[j]=i-48;j++;
        } 
     
     
     
     }
         
     i=getchar();
   }
   /*system("PAUSE");*/
   return 0;
}

Responses

  1. 安安
    我輸入4 + 6 / 3 – 2 * 3 / 6
    會輸出7

    哪裡出問題嗎@@?


發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

%d 位部落客按了讚: