#include <stdio.h>
#include <string.h>
char a[1000],b[2],c[1000];
int judge(char *p)
{
int l=strlen(p);
int i;
for(i=0;i<l&&p[i]=='0';i++);
p=&p[i];
l=strlen(p);
if(l==10)
return strcmp("2147483647",p);
else if(l>10)
return -1;
else
return 1;
}
int compute1(char *a1,char *c1)
{
int l1=strlen(a1);
int l2=strlen(c1);
int i,j=0;
int a[1000],b[1000];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(i=l1-1;i>=0;i--)
a[j++]=a1[i]-'0';
j=0;
for(i=l2-1;i>=0;i--)
b[j++]=c1[i]-'0';
for(i=0;i<1000;i++)
{
a[i]=a[i]+b[i];
if(a[i]>=10)
{
a[i+1]++;
a[i]=a[i]-10;
}
}
j=0;
for(i=999;i>=0&&a[i]==0;i--);
if(i<0)
return 1;
else
{
for(;i>=0;i--)
{
a1[j++]=a[i]+'0';
}
a1[j]='\0';
return judge(a1);
}
}
int compute2( char *a1,char *c1)
{
int l1=strlen(a1);
int l2=strlen(c1);
int i,j=0;
int a[1000],b[1000],z[1000];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(z,0,sizeof(z));
int s,c;
for(i=l1-1;i>=0;i--)
a[j++]=a1[i]-'0';
j=0;
for(i=l2-1;i>=0;i--)
b[j++]=c1[i]-'0';
for(i=0;i<l2;i++)
{
int w=i;
c=0;
for(j=0;j<1000;j++)
{
s=z[w]+b[i]*a[j]+c;
z[w]=s%10;
c=s/10;
w++;
}
}
j=0;
for(i=999;i>=0&&z[i]==0;i--);
if(i<0)
return 1;
else
{
for(;i>=0;i--)
{
a1[j++]=z[i]+'0';
}
a1[j]='\0';
return judge(a1);
}
}
int main()
{
while(scanf("%s%s%s",a,b,c)==3)
{
int i;
printf("%s %s %s\n",a,b,c);
if(judge(a)==-1)
printf("first number too big\n");
if(judge(c)==-1)
printf("second number too big\n");
if(b[0]=='+')
i=compute1(a,c);
else
i=compute2(a,c);
if(i==-1)
printf("result too big\n");
}
return 0;
}
这个是比较麻烦的,按照自己的第一思路写出,网上有直接转换为double比较的~~~汗~,还有数组要开大~Wa了好几次