Cod sursa(job #1014637)

Utilizator Robert29FMI Tilica Robert Robert29 Data 22 octombrie 2013 22:53:15
Problema A+B Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>
FILE*f=fopen("adunare.in","r");
FILE*g=fopen("adunare.out","w");
int nr1,nr2,v[35];
char x;
struct nod
{
	int val;
	nod *urm;
} *prim1,*prim2,*p,*q;
int main()
{
	prim1=new nod;
	prim2=new nod;
	fscanf(f,"%c",&x);
	prim1->val=x-'0';
	prim1->urm=NULL;
	nr1=1;
	while(x>='0'&&x<='9')
	{
		fscanf(f,"%c",&x);
		if(x>='0'&&x<='9')
		{
			++nr1;
			p=new nod;
			p->val=x-'0';
			p->urm=prim1;
			prim1=p;
		}
	
	}
	fscanf(f,"%c",&x);
	prim2->val=x-'0';
	prim2->urm=NULL;
	nr2=1;
	while(x>='0'&&x<='9')
	{
		if(fscanf(f,"%c",&x)!=EOF)
		{
			if(x>='0'&&x<='9')
			{
				++nr2;
				p=new nod;
				p->val=x-'0';
				p->urm=prim2;
				prim2=p;
			}
		}else
			break;
	}
	
	if(nr2>nr1)
	{
		p=prim1;
		while(p->urm!=NULL)
			p=p->urm;
		for(int i=nr1;i<nr2;++i)
		{
			q=new nod;
			q->val=0;
			p->urm=q;
			p=q;
		}
		nr1=nr2;
	}
	else
	{
		p=prim2;
		while(p->urm!=NULL)
			p=p->urm;
		for(int i=nr2;i<nr1;++i)
		{
			q=new nod;
			q->val=0;
			p->urm=q;
			p=q;
		}
	}
	p=prim1;
	nod *p2;
	p2=prim2;
	int t=0;
	for(int i=1;i<=nr1;++i)
	{
		p->val+=p2->val+t;
		t=p->val/10;
		p->val%=10;
		if(i<nr1)
			p=p->urm;
		p2=p2->urm;
	}
	if(t)
	{
		++nr1;
		p2=new nod;
		p2->val=t;
		p->urm=p2;
		p2->urm=NULL;
	}
	v[0]=nr1;
	p=prim1;
	for(int i=1;i<=nr1;++i)
	{
		v[i]=p->val;
		p=p->urm;
	}
	for(int i=nr1;i;--i)
		fprintf(g,"%d",v[i]);
	
	//fclose(f);
	//fclose(g);
	return 0;
}