[Login|Register]
New post

Show post

Search forum

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
Title
Message
(64K)
University of Science and Technology of China
Online Judge for ACM/ICPC
Processed in 1.5ms with 2 query(s).