簡單電腦
【問題描述】實作一個基本的電腦來計算一個簡單的字元串表達式的值。字元串表達式僅包含非負整數,+, - ,*,/ 四種運算符。整數除法僅保留整數部分(會與精确計算結果産生較大誤差)。
【輸入形式】包含四種運算符的字元串。
【輸出形式】表達式計算結果。
【樣例輸入】1+1*2
【樣例輸出】3
【示例代碼】
思路:先算乘除得各部分結果,再算加減得總結果
#include<iostream>
using namespace std;
int main()
{
int a[100];
char c[100];
int num,i=0,j=0;
char ch;
while(cin>>num)
{
a[i]=num;//存儲資料
ch=cin.get();
if(ch=='\n'||ch==-1) {break;}//判斷是否結束輸入
c[j]=ch;//存儲運算符
i++;
j++;
}
int b[100];
char d[100];
int x=0,y=0,m=1,n=0;
for(int k=0;k<j;k++)//先算乘除
{
if(c[k]=='-'||c[k]=='+')
{
d[y]=c[k];y++;
if(k==0||(k!=0&&c[k-1]=='+')||(k!=0&&c[k-1]=='-')) {b[x]=a[k];x++;}
if(k==j-1) {b[x]=a[j];}
}
else
{
if(c[k]=='*')
{
m=a[k]*a[k+1];
for(int g=k+1;;g++)
{
if(c[g]=='*') {m=m*a[g+1];}
else if(c[g]=='/') {m=m/a[g+1];}
else {n=g;break;}
}
}
if(c[k]=='/')
{
m=a[k]/a[k+1];
for(int g=k+1;;g++)
{
if(c[g]=='*') {m=m*a[g+1];}
else if(c[g]=='/') {m=m/a[g+1];}
else {n=g;break;}
}
}
b[x]=m;//用于按順序存儲參與最後的加減算法的資料成員
x++;
k=n-1;
}
}
if(y==0) {cout<<b[0]<<endl;}
else
{
int result=b[0];
for(int k=0;k<y;k++)//再算加減
{
if(d[k]=='+') {result=result+b[k+1];}
else if(d[k]=='-') {result=result-b[k+1];}
}
cout<<result<<endl;
}
return 0;
}
若各位大神有别的方法,歡迎一起交流,共同進步!