Read post
Problem 1036 结果错? 为什么?
[ Topic ] 2011-10-19 10:07:58 drcool
#include <stdio.h>
#include <string.h>
#define MAXLEN 320
typedef struct _intbig{
int len;
unsigned char a[MAXLEN];
}intbig;
void intbig_add(intbig* X,intbig* Y, intbig* Z )
{
int x,i,c=0;
int t;
int t1;
unsigned char *r;
if(X->len>=Y->len)
{
t=Y->len;
t1=X->len;
r=X->a;
}
else
{
t=X->len;
t1=Y->len;
r=Y->a;
}
memset(Z,0,sizeof(*Z));
Z->len=t1;
for(i=0;i<t;i++)
{
x=X->a[i]+Y->a[i]+c;
Z->a[i]=(x%10);
c=x/10;
}
for(;i<t1;i++)
{
x=r[i]+c;
Z->a[i]=x%10;
c=x/10;
if(c==0)
{
memcpy(Z->a+i+1,r+i+1,t1-i-1);
Z->len=t1;
return;
}
}
if(c)
{
Z->a[i]=c;
Z->len=t1+1;
}
}
void main()
{
unsigned char data[320];
unsigned char dx[320];
int c;
int i,j,len,t;
intbig X,Y,Z;
while(1)
{
memset(data,0,320);
c=scanf("%s",data);
if(c==0||c==EOF) break;
len=strlen(data);
memset(&X,0,sizeof(X));
memset(&Y,0,sizeof(Y));
for(j=0;j<len;j++)
X.a[len-1-j]=data[j]-0x30;
for(j=len-1;j>=0;j--) if(X.a[j]) break;
X.len=j+1;
if((X.len==1)&&(X.a[0]==0)) X.len=0;
memset(data,0,320);
c=scanf("%s",data);
if(c==0||c==EOF) break;
len=strlen(data);
for(j=0;j<len;j++)
Y.a[len-1-j]=data[j]-0x30;
for(j=len-1;j>=0;j--) if(Y.a[j]) break;
Y.len=j+1;
if((Y.len==1)&&(Y.a[0]==0)) Y.len=0;
intbig_add(&X,&Y,&Z);
memset(dx,0,320);
for(j=Z.len-1;j>=0;j--)
dx[Z.len-1-j]=Z.a[j]+0x30;
printf("%s\n",dx);
}
}
Reply
|