本題要求你為初學數據結構的小伙伴設計一款簡單的利用堆棧執行的計算器。如上圖所示,計算器由兩個堆棧組成,一個堆棧 S1 存放數字,另一個堆棧 S2 存放運算符。計算器的最下方有一個等號鍵,每次按下這個鍵,計算器就執行以下操作:
- 從 S1 中彈出兩個數字,順序為 n1 和 n2;
- 從 S2 中彈出一個運算符 op;
- 執行計算 n2 op n1;
- 將得到的結果壓回 S1。
直到兩個堆棧都為空時,計算結束,最后的結果將顯示在屏幕上。
輸入格式:
輸入首先在第一行給出正整數 N(1),為 S1 中數字的個數。
第二行給出 N 個絕對值不超過 100 的整數;第三行給出 N−1 個運算符 —— 這里僅考慮 +、-、*、/ 這四種運算。一行中的數字和符號都以空格分隔。
輸出格式:
將輸入的數字和運算符按給定順序分別壓入堆棧 S1 和 S2,將執行計算的最后結果輸出。注意所有的計算都只取結果的整數部分。題目保證計算的中間和最后結果的絕對值都不超過 1。
如果執行除法時出現分母為零的非法操作,則在一行中輸出:ERROR: X/0,其中 X 是當時的分子。然后結束程序。
輸入樣例 1:
5
40 5 8 3 2
/ * - +
輸出樣例 1:
2
輸入樣例 2:
5
2 5 8 4 4
* / - +
輸出樣例 2:
ERROR: 5/0
1 #include<stdio.h> 2 int main(){ 3 int n,i,sum=0,af,cf,f=0; 4 int a[1001]; 5 char s[1000],c; 6 scanf("%d",&n); 7 af=n; 8 cf=n-1; 9 for(i=1;i<=n;i++){ 10 scanf("%d",&a[i]); 11 } 12 getchar(); 13 for(i=1;i<=n-1;i++){ 14 scanf("%c",&s[i]); 15 getchar(); 16 } 17 i=af; 18 while(cf>0){ 19 if(s[cf]=='+'){ 20 sum=a[i-1]+a[i]; 21 a[i-1]=sum; 22 //printf("%d ",sum); 23 } 24 if(s[cf]=='-'){ 25 sum=a[i-1]-a[i]; 26 a[i-1]=sum; 27 //printf("%d ",sum); 28 } 29 if(s[cf]=='*'){ 30 sum=a[i-1]*a[i]; 31 a[i-1]=sum; 32 //printf("%d ",sum); 33 } 34 if(s[cf]=='/'){ 35 if(a[i]!=0){ 36 sum=a[i-1]/a[i]; 37 a[i-1]=sum; 38 //printf("%d ",sum); 39 }else{ 40 printf("ERROR: %d/0",a[i-1]); 41 f=1; 42 break; 43 } 44 } 45 i--; 46 cf--; 47 } 48 if(!f) printf("%d",sum); 49 return 0; 50 }
