Cod sursa(job #278862)

Utilizator maryuszmarius ciubotariu maryusz Data 12 martie 2009 16:11:07
Problema A+B Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
#include<string.h>
#include<iostream.h>
int main(void)
{
	char a[20],b[20],c[20],d;
	int la,lb,i,len,cifa,cifb,r=0;
	FILE *f,*g;
	f=fopen("adunare.in","r");
	g=fopen("adunare.out","w");
	fscanf(f,"%s%s",&a,&b);
	la=strlen(a);lb=strlen(b);
	len=(la>lb)?la:lb;
	
	if(la<len)	
	{
	for(i=0;i<la/2;i++){d=a[i];a[i]=a[la-i-1];a[la-i-1]=d;}
	for(i=la;i<=len;i++) a[i]='0';
	for(i=len-1;i>=0;i--) a[i]=a[len-i-1];
	for(i=0;i<la-1;i++)	a[i]='0';
	} // se decaleaza cifrele pana la capatul maxim al sirurilor

	if(lb<len)	
	{
	for(i=0;i<lb/2;i++){d=b[i];b[i]=b[lb-i-1];b[lb-i-1]=d;}
	for(i=lb;i<=len;i++) b[i]='0';
	for(i=len-1;i>=0;i--) b[i]=b[len-i-1];
	for(i=0;i<lb-1;i++)	b[i]='0';
	} // se decaleaza cifrele pana la capatul maxim al sirurilor

	for(i=1;i<=len;i++)
	{
		cifa=int(a[len-i])-48;
		cifb=int(b[len-i])-48;
		if(cifa>=10 || cifa<=0) cifa=0;
		if(cifb>=10 || cifa<=0) cifb=0;
		c[len-i]=(cifa+cifb+r)%10 + 48 ;
	//	cout<<cifa<<"+"<<cifb<<"+"<<r<<"="<<c[len-i]<<endl;
		if((cifa+cifb)>=10) r+=(cifa+cifb)/10; else r=0;
		
	}
	if(r) fprintf(g,"%d",r);
	for(i=0;i<len;i++)
	{
		fprintf(g,"%c",c[i]);
	}

	fcloseall();
	return 0;
}