Cod sursa(job #60283)

Utilizator sanaDascalu Laurentiu sana Data 13 mai 2007 14:54:52
Problema A+B Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

 int main ()
  {
	  FILE *f;
	  char *linie1,*linie2;
	  int *a,*b,n,m,i,*s;
	  linie1=(char *)malloc(15*sizeof(char));
	  linie2=(char *)malloc(15*sizeof(char));
	  f=fopen("adunare.in","r");
	  fgets(linie1,15,f);
	  fgets(linie2,15,f);
	  
	  m=strlen(linie1);
	  n=strlen(linie2);
	  m--;
	  fclose(f);
	  f=fopen("adunare.out","w");
	  if (m>n) {
	         a=(int *)malloc(m*sizeof(int));
	         b=(int *)malloc(m*sizeof(int));
	         s=(int *)malloc((m+1)*sizeof(int));
	         for (i=0;i<m-n;i++)
	            {
		            a[i]=(int)(linie1[i]-'0');
		            b[i]=0;
	            }
	         for (i=m-n;i<m;i++)
	             {
		             a[i]=(int)(linie1[i]-'0');
		             b[i]=(int)(linie2[i+n-m]-'0');
	             }
	             for (i=0;i<m;i++)
	              {
		               s[i+1]=a[i]+b[i];
	               }
	             s[0]=0;  
	             for (i=m;i>0;i--)
	              {
		              if (s[i]>9) {
			                         s[i]=s[i]%10;
			                         s[i-1]++;
		                         }
             }
             if (s[0]==1) fprintf(f,"1");
             for (i=1;i<=m;i++)
              fprintf(f,"%d",s[i]);
          }
      else {
	         a=(int *)malloc(n*sizeof(int));
	         b=(int *)malloc(n*sizeof(int));
	         s=(int *)malloc((n+1)*sizeof(int));
	         for (i=0;i<n-m;i++)
	            {
		            b[i]=linie2[i]-'0';
		            a[i]=0;
	            }
	         for (i=n-m;i<n;i++)
	             {
		             b[i]=linie2[i]-'0';
		             a[i]=linie1[i+m-n]-'0';
	             }
	             for (i=0;i<n;i++)
	              {
		               s[i+1]=a[i]+b[i];
	               }
	             s[0]=0;
	           
	             for (i=n;i>0;i--)
	              {
		              if (s[i]>9) {
			                         s[i]=s[i]%10;
			                         s[i-1]++;
		                         }
             }
             if (s[0]==1) fprintf(f,"1");
             for (i=1;i<=n;i++)
              fprintf(f,"%d",s[i]);
	  }

	  return 0;
 }