题目:
描述
实现一个简易版的计算器,实现对整数的加乘除三种运算,请注意除法为整除,且运算为顺序运算,不需要计算优先级。
输入
第一行一个整数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; }