天天看點

簡單電腦(C++)

簡單電腦

【問題描述】實作一個基本的電腦來計算一個簡單的字元串表達式的值。字元串表達式僅包含非負整數,+, - ,*,/ 四種運算符。整數除法僅保留整數部分(會與精确計算結果産生較大誤差)。

【輸入形式】包含四種運算符的字元串。

【輸出形式】表達式計算結果。

【樣例輸入】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;
}

           

若各位大神有别的方法,歡迎一起交流,共同進步!