Cod sursa(job #555664)

Utilizator judgment7Andrei Aldea judgment7 Data 15 martie 2011 18:01:29
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.34 kb
#include <fstream>
using namespace std;
int a[100],b[100],c[100],z=1,an,bn;
ifstream f("calcule.in");
ofstream g("calcule.out");

void copiere(int a[],int &an)
{if(z<an)
	an=z;

int k2,k;

for(k=1,k2=z;k<=an;k++,k2--)
	{a[k]=c[k2]; 
	c[k2]=0;c[k2+1]=0;}
	
}


void afis(int z)
{if(c[z])
		g<<c[z]; 
	for(int i=z-1;i>=1;i--)
		g<<c[i];

}
void adunare(int a[],int b[], int an, int bn)
{int t,i=an,j=bn; z=1;
/*if(an>bn)
	z=an;
else
	z=bn;*/
while(i>=1&&j>=1)
{
	t=a[i]+b[j];
	c[z]+=t%10;
	if(c[z]>=10)
		{c[z+1]=c[z+1]+c[z]/10;
		c[z]=c[z]%10;}
	c[z+1]+=t/10;
	i--;j--;z++;
}

while(i>=1)
{t=a[i];	
c[z]+=t%10;
if(c[z]>=10)
		{c[z+1]=c[z+1]+c[z]/10;
		c[z]=c[z]%10;}
c[z+1]+=t/10;
i--;z++;
}
while(j>=1)
{t=b[j];	
c[z]+=t%10;
if(c[z]>=10)
		{c[z+1]=c[z+1]+c[z]/10;
		c[z]=c[z]%10;}
c[z+1]+=t/10;
j--;z++;

}

}	
void scadere(int a[],int b[], int an, int bn)
{int t,i=an,j=bn; z=1;
/*if(an>bn)
	z=an;
else
	z=bn;*/
while(i>=1&&j>=1)
{
	t=a[i]-b[j];
	c[z]+=t%10;
	if(c[z]<0)
		{c[z]=10+c[z];c[z+1]--;}
	i--;j--;z++;
}

while(i>=1)
{t=a[i];	
c[z]+=t%10;
if(c[z]>=10)
		{c[z+1]=c[z+1]+c[z]/10;
		c[z]=c[z]%10;}
c[z+1]+=t/10;
i--;z++;
}
while(j>=1)
{t=b[j];	
c[z]+=t%10;
if(c[z]>=10)
		{c[z+1]=c[z+1]+c[z]/10;
		c[z]=c[z]%10;}
c[z+1]+=t/10;
j--;z++;
}
for(int k=z;k>=1;k--)
{	if(c[k]==0)
	{//for(int g=k+1; g<=z; g++)
		//   c[g]=c[g-1];
		z--;
		}		
	if(c[k]!=0)
		k=0;
}
}

int verificare(int an, int bn)
{ if(an>bn) 
	   return 1; 
    else
if(bn>an)		
	   return 2;
else
	for(int i=1; i<=an; i++)
	   if(a[i]>b[i])
	  	  return 1; 
	   else
		if(a[i]<b[i])
		  return 2;
return 3;
	   
}  
	 


void cmmdc(int &an, int &bn)
{
	while(verificare(an, bn)!=3)
   if(verificare(an, bn)==1)
	  {scadere(a, b, an, bn);
   copiere(a, an);
	  }
   else{
	   	  scadere(b, a, bn, an);
		  copiere(b, bn);
   }
}

int main()
{ 
	f>>an;
	for(int i=1;i<=an;i++)
		f>>a[i];
	f>>bn;
	for(int i=1;i<=bn;i++)
		f>>b[i];
//	adunare(a, a, an, an);
//	afis(z);
	//adunare(b, a);
	g<<endl;
	g<<endl;
	int h=6;

	
	
	
/*	while(h){
	
	scadere(a, b, an, bn);
	afis(z);
	copiere();
	g<<endl;g<<endl;
	h--; }
*/
	//scadere(a,b,an,bn);
	//afis(z);
// 
//	scadere(b, a, bn, an);

cmmdc(an, bn);

g<<"\n";
for(int o=1;o<=bn;o++)
	g<<b[o];
}