描述 Description | ||
给出一个表达式,其中运算符仅包含+,要求求出表达式的最终值 |
输入格式 Input Format | |||
仅一行,即为表达式 |
输出格式 Output Format | ||
仅一行,既为表达式算出的结果 | ||
样例输入 Sample Input | |||
样例输出 Sample Output | |||
注释 Hint | |||
表达式总长度<=1500
|
//需要大数
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
class LargeNum
{
int A[1000]; //存放大数;
int Length;
public:
LargeNum() {Length=0;memset(A,0,sizeof(A));}
LargeNum(char *);
~LargeNum(){}
friend LargeNum operator + (LargeNum &a,LargeNum &b);
friend ostream & operator << (ostream & out,LargeNum &a);
};
LargeNum::LargeNum(char c[1000])
{
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;
}
ostream & operator << (ostream & out,LargeNum &a)
{
for(int i=a.Length-1;i>=0;i--)
out<<a.A[i];
return out;
}
int main ()
{
LargeNum sum;
char c[2000+1];
char d[1000];
gets(c);
int j,k;
for(int i=0,j=0;i<strlen(c);i++)
{
if(c[i]==' ') continue;
else if(c[i]!='+') {d[j++]=c[i]; k=j;}
else
{
d[k]='/0';
//cout<<d<<endl;
LargeNum a(d);
sum=sum+a;
j=0;
}
}
d[k]='/0';
//cout<<d<<endl;
LargeNum a(d);
sum=sum+a;
cout<<sum<<endl;
//system("pause");
return 0;
}