描述 Description | |||
给出一个表达式,其中运算符仅包含+,-,要求求出表达式的最终值 保证数据中不会出现负数,并且同时保证,如果你按从左到右的顺序计算,同样也不会出现负数的情况。 |
输入格式 Input Format | |||
仅一行,即为表达式 |
输出格式 Output Format | |||
仅一行,既为表达式算出的结果 |
样例输入 Sample Input | |||
样例输出 Sample Output | |||
注释 Hint | |||
表达式总长度<=255 表达式中数字位数<=255 |
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
class LargeNum
{
int A[3000]; //存放大数;
int Length;
public:
LargeNum() {Length=0;memset(A,0,sizeof(A));}
LargeNum(char *);
~LargeNum(){}
friend LargeNum operator - (LargeNum &a,LargeNum &b);
friend LargeNum operator -= (LargeNum &a,LargeNum &b);
friend LargeNum operator + (LargeNum &a,LargeNum &b);
friend LargeNum operator += (LargeNum &a,LargeNum &b);
friend ostream & operator << (ostream & out,LargeNum &a);
};
LargeNum::LargeNum(char c[3000])
{
Length=0;
memset(A,0,sizeof(A));
for(int i=strlen(c)-1;i>=0;i--) {A[Length++]=c[i]-'0';} //0代表个位
}
LargeNum operator + (LargeNum &a,LargeNum &b)
{
LargeNum c;
for(int i=0;i<max(a.Length,b.Length);i++)
{
c.A[i]+=a.A[i]+b.A[i];
if(c.A[i]>=10) {c.A[i+1]+=1; c.A[i]-=10; if((i+1)==max(a.Length,b.Length)) c.Length+=1;}
c.Length+=1;
}
return c;
}
LargeNum operator += (LargeNum &a,LargeNum &b)
{
a=a+b;
return a;
}
LargeNum operator - (LargeNum &a,LargeNum &b)
{
LargeNum c;
c.Length=a.Length;
for(int i=0;i<a.Length;i++)
{
if(a.A[i]>=b.A[i]) c.A[i]=a.A[i]-b.A[i];
else
{
c.A[i]=a.A[i]+10-b.A[i];
for(int j=i+1;j<a.Length;j++)
if(a.A[j]==0) {a.A[j]=9; continue;}
else
{
a.A[j]-=1;
break;
}
}
}
for(int i=a.Length-1;i>0;i--)
if(c.A[i]==0) c.Length-=1;
else break;
//cout<<c.Length<<".."<<endl;
return c;
}
LargeNum operator -= (LargeNum &a,LargeNum &b)
{
a=a-b;
return a;
}
ostream & operator << (ostream & out,LargeNum &a)
{
for(int i=a.Length-1;i>=0;i--)
out<<a.A[i];
return out;
}
char c[3000+1];
char d[3000];
int main ()
{
LargeNum sum;
gets(c);
int count=0;
int j,k,t[1000],m=0;
memset(t,0,sizeof(t));
for(int i=0,j=0;i<strlen(c);i++)
{
if(c[i]==' ') continue;
else if(c[i]!='+'&&c[i]!='-') {d[j++]=c[i]; k=j;}
else
{
d[k]='/0';
//cout<<d<<endl;
t[m++]=i;
LargeNum a(d);
if(count==0) { sum+=a; count+=1; }
else
{
if(c[t[m-2]]=='+') sum+=a;
else sum-=a;
}
j=0;
}
}
d[k]='/0';
//cout<<d<<endl;
LargeNum a(d);
if(count==0) { sum+=a; count+=1; }
else
{
if(c[t[m-1]]=='+') sum+=a;
else sum-=a;
}
//for(int i=0;i<m;i++) cout<<c[t[i]]<<"..."; cout<<endl;
cout<<sum<<endl;
//system("pause");
return 0;
}