#include <stdio.h>
#include <string.h>
#include<malloc.h>
int MaxInt[10]={2,1,4,7,4,8,3,6,4,7};
void tempAdd(int temp[],int product[])
{
int i,c=0;
for(i=0;i<=100;i++)
{
product[i]=product[i]+temp[i]+c;
c=0;
if(product[i]>9)
{
product[i]=product[i] %10;
c=1;
}
}
}
int Compare(int num[],int n)
{
int i,j=0,*temp=(int*)malloc(sizeof(int)*n);
memcpy(temp,num,sizeof(int)*n);
for(i=0;i<10;i++)
temp[i]=num[i]-MaxInt[9-i];
for(i=n-1;i>=0;i--)
{
if(temp[i]!=0)
{
j=i; break;
}
}
i=temp[j];
free(temp);
if(i>0) return 1;
else return -1;
}
int main()
{
inti,j,num1[1000],num2[1000],sum[20],temp[100],prod[100],len1,len2,c=0,n,flag=0;
char oper,p1[1000],p2[1000];
while(scanf("%s %c%s",p1,&oper,p2)==3)
{
printf("%s %c %s\n",p1,oper,p2);
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
memset(sum,0,sizeof(sum));
memset(temp,0,sizeof(temp));
memset(prod,0,sizeof(prod));
len1=strlen(p1);
len2=strlen(p2);
for(i=0;i<len1;i++)
num1[len1-i-1]=(p1[i]-'0');
for(i=0;i<len2;i++)
num2[len2-i-1]=(p2[i]-'0');
for(i=0;i<len1;i++)if(p1[i]!='0') {len1=len1-i; break;}
if(i==len1) len1=1;
for(i=0;i<len2;i++)if(p2[i]!='0') {len2=len2-i; break;}
if(i==len2) len2=1;
if(len1>10)
{
printf("first number toobig\n");
flag=1;
}
else if(Compare(num1,10)>0)
{
printf("first number toobig\n");
flag=1;
}
if(len2>10)
{
printf("second number toobig\n");
flag=1;
}
else if(Compare(num2,10)>0)
{
printf("second number toobig\n");
flag=1;
}
if(flag==1)
{
flag=0;
if(!(oper=='*'&& ((len1==1&& num1[0]==0) || (len2==1&& num2[0]==0))))
printf("result toobig\n");
continue;
}
n=len1>=len2?len1:len2;
if(oper=='+')
{
for(i=0;i<n+1;i++)
{
sum[i]=num1[i]+num2[i]+c;
c=0;
if(sum[i]>9)
{
sum[i]=sum[i] % 10;
c=1;
}
}
if(Compare(sum,11)>0)
{
printf("result too big\n");
}
}
else
{
for(j=0;j<len2;j++)
{
for(i=0;i<=len1;i++)
{
temp[i+j]=num2[j]*num1[i]+c;
c=0;
if(temp[i+j]>9)
{
c=temp[i+j]/10;
temp[i+j]=temp[i+j] % 10;
}
}
tempAdd(temp,prod);
memset(temp,0,sizeof(temp));
}
if(Compare(prod,100)>0)
{
printf("result too big\n");
}
}
}
return 0;
}
找出所有Bug后还是WR了n次,最后发现竟是数组开的不够大,真是无语