注意int型所能表示的最大的数
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define maxn 100050
using namespace std;
string s;
int map[maxn];
void input()
{
while(getline(cin,s))
{
memset(map,0,sizeof(map));
int len=s.length();
string s1="",s2="",s3="";
int i,j,k;
for( i=0;i<len;i++)
{
if(s[i]==' ')break;
s1+=s[i];
}
s1[i]='\0';
s2+=s[i+1];s2[1]='\0';
for(j=i+3,k=0;j<len;j++,k++)
s3+=s[j];
s3[k]='\0';
reverse(s1.begin(),s1.end());
reverse(s3.begin(),s3.end());
long long max=2147483647,ans=0;
cout<<s<<endl;
for(int i=0;i<s1.length();i++)
{
ans+=(s1[i]-'0')*pow(10,i);
if(ans>max){cout<<"first number too big"<<endl;break;}
}
ans=0;
for(int i=0;i<s3.length();i++)
{
ans+=(s3[i]-'0')*pow(10,i);
if(ans>max){cout<<"second number too big"<<endl;break;}
}
if(s2[0]=='*')
{
for(int i=0;i<s1.length();i++)
{
for(int j=0;j<s3.length();j++)
{
map[i+j]+=(s1[i]-'0')*(s3[j]-'0');
}
}
}
else if(s2[0]=='+')
{
for(int i=0;i<s1.length();i++)
map[i]+=s1[i]-'0';
for(int i=0;i<s3.length();i++)
map[i]+=s3[i]-'0';
}
int p;
for( p=maxn-1;p>=0;p--)
{
if(map[p]!=0)break;
}
ans=0;
for(int i=0;i<=p;i++)
{
ans+=map[i]*pow(10,i);
if(ans>max){cout<<"result too big"<<endl;break;}
}
}
}
int main()
{
input();
return 0;
}