Pagini recente » Cod sursa (job #2049697) | Cod sursa (job #2756158) | Cod sursa (job #114581) | Cod sursa (job #1856664) | Cod sursa (job #115155)
Cod sursa(job #115155)
# include <stdio.h>
long int nr[10000],len,last=0;
const long int BAZA=10000;
const long int NCFB=4;
long int cmmdc(long int a, long int b)
{
long int r=a%b;
while (r)
{
a=b;
b=r;
r=a%b;
}
return b;
}
void check_first()
{
long int w;
last=0;
while (nr[len]>=BAZA)
{
nr[len+1]=nr[len]/BAZA;
nr[len]%=BAZA;
w=nr[len];
while (w&&(w%10==1||w%10==0)) w/=10;
if (w) last=len;
len++;
}
w=nr[len];
while (w&&(w%10==1||w%10==0)) w/=10;
if (w) last=len;
}
void check()
{
long int w,i,lc=0;
for (i=1;nr[i]>=BAZA;i++)
{
nr[i+1]+=nr[i]/BAZA;
nr[i]%=BAZA;
w=nr[i];
while (w&&(w%10==0||w%10==1)) w/=10;
if (w) lc=i;
}
w=nr[i];
while (w&&(w%10==0||w%10==1)) w/=10;
if (w) lc=i;
if (i>len) len=i;
//daca nu am trecut de last-1 inseamna ca nu s-a modificat situatia
//daca am trecut de last-1 inseamna ca last=lc;
if (i>last-1) last=lc;
}
void replicate(long int a)
{
long int step=0;
check_first();
while (last)
{
step++;
if (step>4) step-=4;
if (step%4==2)
{
nr[1]+=4*a;
check();
}
else
{
nr[1]+=2*a;
check();
}
}
}
void scrie(long int nr0)
{
long int w,ok=0,ncf;
FILE *g=fopen("multiplu.out","w");
while (len)
{
w=nr[len];
ncf=0;
if (w==0) ncf=1;
while (w) {ncf++;w/=10;}
while (ok&&ncf<NCFB)
{
fprintf(g,"0");
ncf++;
}
ok=1;
fprintf(g,"%ld",nr[len]);
len--;
}
while (nr0) {fprintf(g,"0");nr0--;}
fprintf(g,"\n");
}
int main()
{
long int a,b;
FILE *f=fopen("multiplu.in","r");
fscanf(f,"%ld%ld",&a,&b);
a=a*b/cmmdc(a,b);
long int nr2=0,nr5=0,nr0;
while (a%2==0) {nr2++;a/=2;}
while (a%5==0) {nr5++;a/=5;}
if (nr2>=nr5) nr0=nr2;
else nr0=nr5;
//loading the number
nr[1]=a;len=1;
replicate(a);
scrie(nr0);
fcloseall();
return 0;
}