Cod sursa(job #66610)

Utilizator the_chosen_oneCristian Badea the_chosen_one Data 20 iunie 2007 11:11:05
Problema A+B Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#include<string.h>
struct nod{
	int info;
	nod*next;
};
void add(nod*&p,nod*&u,int x){
	nod*q;
	q=new nod;
	q->info=x;
	q->next=NULL;
	if((u==p)&&(u==NULL))
		p=q;
	else 
		u->next=q;
	u=q;
}
nod *lista(char s[100]){
	int i,n=strlen(s);
	nod*p,*u;
	p=u=NULL;
	for(i=n-1;i>=0;i--)
		add(p,u,s[i]-'0');
	return p;
}
void citire(nod*&p){
	char s[100];
	scanf("%s",s);
	p=lista(s);
}
void scrie(nod*q){
	if(q){
		scrie(q->next);
		printf("%d",q->info);
	}
}
void suma(nod*&p1,nod*p2){
	int t=0,x;
	nod*q1=p1,*q2=p2,*u;
	for(;q1&&q2;){
		x=q1->info+q2->info+t;
		q1->info=x%10;
		t=x/10;
		u=q1;
		q1=q1->next;
		q2=q2->next;
	}
	for(;q1;){
		x=q1->info+t;
		q1->info=x%10;
		t=x/10;
		u=q1;
		q1=q1->next;
	}
	for(;q2;q2=q2->next){
		x=q2->info+t;
		add(p1,u,x%10);
		t=x/10;
	}
	if(t)
		add(p1,u,t);
}
int main(){
	freopen("adunare.in","r",stdin);
	freopen("adunare.out","w",stdout);
	nod*p1=NULL,*p2=NULL;
	citire(p1);
	citire(p2);
	suma(p1,p2);
	scrie(p1);
}