Cod sursa(job #261176)

Utilizator ooctavTuchila Octavian ooctav Data 17 februarie 2009 22:06:31
Problema Multiplu Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb

#include <stdio.h>
char e[1000004];
int aux[10];
int a,b,cmm,a2;
void cmmmc(FILE *f1)
{
	int ca,cb,r,cmm2;
	fscanf(f1,"%d %d",&a,&b);
	ca=a;
	cb=b;
	while(cb)
	{
		r=ca%cb;
		ca=cb;
		cb=r;
	}
	cmm=a*b/ca;
	a=0;
	cmm2=cmm;
	while(cmm2)
	{
		cmm2=cmm2/10;
		a++;
	}
	a2=a;
	while(cmm)
	{
		aux[a]=cmm%10;
		cmm=cmm/10;
		a--;
	}
}
void dezv1(int i)
{
	int contor=0;
	while(e[i]!=0)
		{
			if(e[i]>=10)
			{
				e[i-1]=e[i-1]+(e[i]-e[i]%10)/10;
				e[i]=e[i]%10;
			}
			i--;
		}
}
int dezv2()
{
	int i=1,contor=0;
	while(e[i]!=0)
		{
			if(e[i]>=10)
			{
				e[i+1]=e[i+1]+10*(e[i]-10*(e[i]/10));
				e[i]=e[i]/10;
			}
			i++;
			contor++;
		}
		return contor;
}
bool verificare(int contor)
{
	int i;
	bool b;
	b=true;
	for(i=1;i<=contor;i++)
			if(e[i]!=0 &&  e[i]!=1)
			{
				b=false;
				break;
			}
	return b;
}
int aflare()
{
	int i,contor=a2,cc,temp,temp2;
	bool b=false;
	while(b==false)
	{
		cc=contor;
		for(i=a2;i>=1;i--)
		{
			e[cc]=e[cc]+aux[i];
			cc--;
		}
		for(i=2;i<=contor;i++)
			if(e[i]>=10)
				dezv1(i);
		if(e[contor-a2+1]>=10)
				contor=dezv2();
		b=verificare(contor);
		if(e[0]!=0)
		{
			contor++;
			temp=e[0];
			e[0]=0;
			for(i=1;i<=contor;i++)
			{
				temp2=temp;
				temp=e[i];
				e[i]=temp2;
			}
		}

	}
	return contor;
}


int main()
{
	int i,c;
	FILE *f1,*f2;
	f1=fopen("multiplu.in","r");
	f2=fopen("multiplu.out","w");
	cmmmc(f1);
	c=aflare();
	for(i=1;i<=c;i++)
		fprintf(f2,"%d",e[i]);
	fclose(f1);
	fclose(f2);
	return 0;
}