好不容易啊,蒜头君终于熬到了做到数学最后一题的时刻了,眼前是一堆杂乱的加减算式。显然成功就在眼前了。可是他脑细胞和 RP 已经消耗殆尽,所以这个重要的任务就交给你们啦。
输入格式
一个长度不超过 10000的字符串,表示一个只含加减法的算术表达式,表达式各项不超过 10^5。
输出格式
一个整数,为计算所得的结果。
样例输入
99+88-77
样例输出
110
#include <bits/stdc++.h>
using namespace std;
int transform(char *p){
int temp=0,i=0,res=0;
while(*p!='\0'){
temp+=(*p-'0')*pow(10,i);
p++;
i++;
}
while(i--){
res+=(temp%10)*pow(10,i);
temp/=10;
}
return res;
}//将数字字符串转化为数字
void solve(char a[])
{
int ans=0;
queue<char>q1;
queue<int>q2;
char *p1=a,*p2=a;//双指针
while(*p1!='\0'){
p1++;
if(*p1=='+'||*p1=='-'){
char temp=*p1;
q1.push(temp);//运算符进队
*p1='\0';
q2.push(transform(p2));//数字进队
*p1=temp;
while(p2!=p1)p2++;
p2++;
}
if(*p1=='\0')q2.push(transform(p2));
}
ans+=q2.front();q2.pop();
do{
if(q1.front()=='+')ans+=q2.front();
else if(q1.front()=='-')ans-=q2.front();//运算
q1.pop();
q2.pop();
}while(q2.size()>0);
cout<<ans;
}
int main(){
char a[10000];
cin>>a;
solve(a);
return 0;
}