L2-1 简单计算器 (25 分)详解c语言 模拟堆栈
生活随笔
收集整理的這篇文章主要介紹了
L2-1 简单计算器 (25 分)详解c语言 模拟堆栈
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
L2-1 簡單計算器 (25 分)
本題要求你為初學數據結構的小伙伴設計一款簡單的利用堆棧執行的計算器。如上圖所示,計算器由兩個堆棧組成,一個堆棧 S?1存放數字,另一個堆棧
S?2 存放運算符。計算器的最下方有一個等號鍵,每次按下這個鍵,計算器就執行以下操作:從S ?1中彈出兩個數字,順序為 n?1和 n2 ;從 S?2中彈出一個運算符 op;執行計算 n?2 op n?1 ;
將得到的結果壓回 S1?? 。直到兩個堆棧都為空時,計算結束,最后的結果將顯示在屏幕上。
輸入格式:
輸入首先在第一行給出正整數 N(1<N≤10 ?3 ?? ),為 S ?1 ?? 中數字的個數。
第二行給出 N 個絕對值不超過 100 的整數;第三行給出 N?1 個運算符 —— 這里僅考慮 +、-、*、/
這四種運算。一行中的數字和符號都以空格分隔。
輸出格式:
將輸入的數字和運算符按給定順序分別壓入堆棧 S ?1 ?? 和 S ?2
將執行計算的最后結果輸出。注意所有的計算都只取結果的整數部分。題目保證計算的中間和最后結果的絕對值都不超過10?910?^910?9?? 。
如果執行除法時出現分母為零的非法操作,則在一行中輸出:ERROR: X/0,其中 X 是當時的分子。然后結束程序。
輸入樣例 1:
5
40 5 8 3 2
/ * - +
輸出樣例 1:
2
輸入樣例 2:
5
2 5 8 4 4
?/?+* / - +?/?+
輸出樣例 2:
ERROR: 5/0
#include<stdio.h> int digit(int a,int b,char c)//計算操作 {if(c=='+')return a+b;if(c=='-')return a-b;if(c=='*')return a*b;if(c=='/'&&b==0)return -199;//如果出錯就返回199;繼續后續的ERROR打印if(c=='/')return a/b;else return 0; } int main() {int n;scanf("%d",&n);int a[n];char b[n-1];for(int i=0;i<n;i++)scanf("%d",&a[i]);getchar();//要用getchar吸收空格和回車,一開始搞錯了,找了很久的錯誤。for(int i=0;i<n-1;i++){scanf("%c",&b[i]);getchar(); }int sum=0;int p = n-2;//p是字符數組的下標,因為有n-1個元素,所以末尾元素是n-2for(int i=n-1;i>0;i--){ int tem = a[i-1];a[i-1] = digit(a[i-1],a[i],b[p]);//計算后兩位,然后結果給到倒數第二位p--;if(a[i-1]==-199)//哎,等于-199說明錯誤啦,所以輸出然后直接返回。tem是為了存i-1的數值//不然i-1就是-199啦,就會錯的一塌糊涂。{printf("ERROR: %d/%d",tem,a[i]);return 0;}}printf("%d",a[0]);//全部計算完之后就只剩下a[0]啦 }全紅很不錯
#include<bits/stdc++.h>//c++就比較簡單了 using namespace std;int c(int a,int b,char c) {if(c=='+')return a+b;if(c=='-')return a-b;if(c=='*')return a*b;if(c=='/')return a/b;else return 0; }int main() {int n;cin>>n;stack<int>a;//數字棧 stack<char>b;//符號棧 for(int i=0;i<n;i++){int tem;cin>>tem;a.push(tem);} for(int i=0;i<n-1;i++){char tem;cin>>tem;b.push(tem);}for(int i=0;i<n-1;i++){int x1 = a.top();a.pop();int x2 = a.top();a.pop();char x3 = b.top();b.pop();if(x1==0&&x3=='/'){cout<<"ERROR: "<<x2<<"/"<<x1;return 0;}a.push(c(x2,x1,x3));}cout<<a.top()<<endl; }總結
以上是生活随笔為你收集整理的L2-1 简单计算器 (25 分)详解c语言 模拟堆栈的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 堆中的路径 (25 分)
- 下一篇: 银行业务队列简单模拟 (25 分)c语言