【练习】计算器 C++

题目:

描述

实现一个简易版的计算器,实现对整数的加乘除三种运算,请注意除法为整除,且运算为顺序运算,不需要计算优先级。

输入

第一行一个整数T代表数据组数,接下来T组数据。
每组数据包括一个长度不超过9的字符串,里面只包括数字以及三种运算符号+、*、/。
保证输入合法,除数不会为0

输出

对于每组数据输出一行整数作为答案

样例输入1  复制
4
1/2+4/4
2/3
12+32*4
6
样例输出1
1
0
176
6
查看隐藏信息

思路:

首先这题要把数字和符号区分开,然后数字的话也要考虑位数。(不用考虑运算符优先级真是太好了)

我是把分开的数字和字符放在队列里,比较方便。

代码:

#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int main()
{
    queue<int> q;
    queue<char> q2;
    string zf;
    int t;
    cin>>t;
    while(t--)
    {
        cin>>zf;
        int c=zf.length();
        int sum1=0,flag=0;
        for(int i=0;i<c;i++)
        {
            if(zf[i]>='0'&&zf[i]<='9'&&flag==1){sum1=sum1*10+((int)(zf[i])-48);flag=1;}
            if(zf[i]>='0'&&zf[i]<='9'&&flag==0){sum1=(int)(zf[i])-48;flag=1;}
            if(zf[i]=='/'||zf[i]=='+'||zf[i]=='*'){flag=0;q.push(sum1);q2.push(zf[i]);sum1=0;}
        }
        q.push(sum1);
        int sum=q.front();
        q.pop();
        while(!q.empty())
        {
            int a=q.front();
            char b=q2.front();
            q2.pop();
            if(b=='/'){sum=sum/a;q.pop();}
            if(b=='+'){sum=sum+a;q.pop();}
            if(b=='*'){sum=sum*a;q.pop();}
        }
        cout<<sum<<endl;
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/zero_979/article/details/80295792
今日推荐