Cod sursa(job #1024374)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 8 noiembrie 2013 17:21:57
Problema A+B Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("adunare.in");
ofstream g("adunare.out");
char s[2001];
int L1,L2;

struct numar{
	int x;
	numar *next;
	numar *prev;
};
numar *b,*a,*c,*q,*p,*u,*r,*aux;

void adunare(){
	int t;
	c=new numar;
	c->prev=NULL;
	(c->x)=((a->x)+(b->x))%10;
	t=((a->x)+(b->x))/10;
	p=a->next,q=b->next,u=c;
	while(q!=NULL){
		r=new numar;
		(r->x)=((p->x)+(q->x)+t)%10;
		t=((p->x)+(q->x)+t)/10;
		u->next=r;
		r->prev=u;
		u=r;
		aux=p,p=p->next,delete aux;
		aux=q,q=q->next,delete aux;
	}
	delete q;
	while(p!=NULL){
		r=new numar;
		(r->x)=(t+(p->x))%10;
		t=(t+(p->x))/10;
		u->next=r;
		r->prev=u;
		u=r;
		aux=p,p=p->next,delete aux;
	}
	delete p;
	r->next=NULL;
}

int main(void){
	register int i,j;
	
	f>>s;
	a=new numar;
	L1=strlen(s);
	a->x=s[L1-1]-'0';
	p=a;
	for(i=L1-2;i>=0;i--){
		q=new numar;
		q->x=s[i]-'0';
		p->next=q;
		p=q;
	}
	q->next=NULL;
	
	f>>s;
	b=new numar;
	L2=strlen(s);
	b->x=s[L2-1]-'0';
	p=b;
	for(i=L2-2;i>=0;i--){
		q=new numar;
		q->x=s[i]-'0';
		p->next=q;
		p=q;
	}
	q->next=NULL;
	
	if(L2>L1)
		q=a,a=b,b=q;
	adunare();
	while(r!=NULL){
		g<<r->x;
		aux=r,r=r->prev,delete aux;
	}
	f.close();
	g.close();
	return 0;
}