tyvj1040
#include<iostream>
#include<string>
#include<vector>
#include<math.h>
using namespace std;
string sum(string a,string b)
{
int n1=a.length(),n2=b.length();
int n=n1>=n2?(n1+1):(n2+1);//计算最终数组的大小最二者最大值加一
string c(n,'0');//开辟数组
int j=0,sum=0,flag=0;//j为初始计值,sum为中间变量,flag为是否存在进位的标志位
--n1;//因为要从最小位计算
--n2;//
n--;
while(n1>=0&&n2>=0)
{
sum=a[n1--]-'0'+b[n2--]-'0'+flag;//从右往左相加计算
flag=sum>=10?1:0;//超过10就记为1
c[n--]=sum%10+'0';//记录数据
}
while(n1>=0)//数组a个数较多时
{
sum=a[n1--]-'0'+flag;
flag=sum>=10?1:0;
c[n--]=sum%10+'0';
}
while(n2>=0)//数组b个数较多时
{
sum=b[n2--]-'0'+flag;
flag=sum>=10?1:0;
c[n--]=sum%10+'0';
}
c[0]=flag+'0';
return c;
}
string minus1(string a,string b)
{
int n1=a.length(),n2=b.length();
int n=n1;//计算最终数组的大小最二者最大值加一
string c(n,'0');//开辟数组
int j=0,sum=0,flag=0;//j为初始计值,sum为中间变量,flag为是否存在进位的标志位
--n1;//因为要从最小位计算
--n2;//
n--;
while(n1>=0&&n2>=0)
{
sum=a[n1--]-b[n2--]+flag;//从右往左相加计算
if(sum<0)
{
sum+=10;
flag=-1;
}
else
flag=0;
c[n--]=sum+'0';//记录数据
}
while(n1>=0)//数组a个数较多时
{
sum=a[n1--]-'0'+flag;
if(sum<0)
{
sum+=10;
flag=-1;
}
else
flag=0;
c[n--]=sum+'0';
}
c[0]=flag+'0';
return c;
}
int main()
{
string exp;
while(cin>>exp)
{
int len=exp.length(),i1=0,i2=0,f=0;
vector<string> mm;
vector<int> mm1(1,1);
string result("0"),temp("0"),b;
for(int i=0;i<len;++i)
{
if(!isdigit(exp[i])||i==len-1)
{
if(exp[i]=='+')
mm1.push_back(1);
if(exp[i]=='-')
mm1.push_back(0);
if(i==len-1)
++i;
//b=exp.substr(i1,i-i1);
mm.push_back(exp.substr(i1,i-i1));
i1=i+1;
}
}
int j=0;
for(int k=0;k<mm.size();++k)
{
if(mm1[k]==1)
result=sum(result,mm[k]);
else
result=minus1(result,mm[k]);
}
for(;j<result.size()-1;++j)
{
if(result[j]!='0')
break;
}
for(;j<result.size();++j)
cout<<result[j];
cout<<endl;
}
}