Cod sursa(job #115854)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 17 decembrie 2007 03:04:58
Problema Multiplu Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#include<stdlib.h>
struct nod{long int rest;nod *next;};
nod *prim,*ultim;
long int a,b,aa,bb,aux,m,d[2000002],c[2000002],k,x[2000002],l,i;
void prel();
int main()
{
	FILE *f,*g;f=fopen("multiplu.in","r");g=fopen("multiplu.out","w");
	fscanf(f,"%ld%ld",&a,&b);
	aa=a;bb=b;
	while(bb){aa=aa%bb;aux=aa;aa=bb;bb=aux;}
	a=a/aa;m=a*b;
	prim=new nod;prim->rest=1;prim->next=0;ultim=prim;c[1]=1;d[1]=-1;
	for(;;){prel();if(d[0])break;}
	k=0;
	do{l++;x[l]=c[k];k=d[k];}while(k!=-1);
        for(i=l;i>=1;i--)fprintf(g,"%ld",x[i]);
	fprintf(g,"\n");fcloseall();return 0;
}
void prel()
{       long int r,r0,r1;
	nod *p,*u0,*u1;
	r=prim->rest;
        r0=(r*10)%m;
	if(!d[r0]){d[r0]=r;u0=new nod;u0->rest=r0;u0->next=0;ultim->next=u0;ultim=u0;}
	r1=(r*10+1)%m;
	if(!d[r1]){d[r1]=r;c[r1]=1;u1=new nod;u1->rest=r1;u1->next=0;ultim->next=u1;ultim=u1;}
	p=prim;prim=prim->next;free(p);
}