Pagini recente » Cod sursa (job #138776) | Cod sursa (job #2634635) | Cod sursa (job #59774) | Cod sursa (job #1357851) | Cod sursa (job #67887)
Cod sursa(job #67887)
#include<stdio.h>
#include<string.h>
int a[1009],b[1009],n[1009],z[3000],ok=1;
char x[1009];
FILE*f=fopen("sarpe.in","r");
void read()
{
int i;
fscanf(f,"%s",x);
int p;
p=strlen(x);
if(p==1&&x[0]=='1') ok=0;
for(i=0;i<p;++i)
n[p-i]=x[i]-'0';
n[0]=p;
}
void formN()
{
int i,t=0,c;
for(i=1;i<=n[0];++i)
{
c=n[i];
n[i]=((4*n[i])+t)%10;
t=(t+4*c)/10;
}
if(t>0) { n[0]++; n[n[0]]=t;}
}
void formA()
{
int i,k,c;
a[0]=n[0];
k=1;
int t=0;
for(i=1;i<=a[0];++i)
{
if(n[i]-k-t<0)
{
a[i]=n[i]-k-t+10;
t=1;
}
else
{
a[i]=n[i]-k-t;
t=0;
}
k=0;
}
if(t>0) a[--a[0]]=9;
}
void formB()
{
int i,k,c;
b[0]=n[0];
k=2;
int t=0;
for(i=1;i<=b[0];++i)
{
if(n[i]-k-t<0)
{
b[i]=n[i]-k-t+10;
t=1;
}
else
{
b[i]=n[i]-k-t;
t=0;
}
k=0;
}
if(t>0) b[--b[0]]=9;
}
void inmultA()
{
int i,t=0,k=2,c;
for(i=1;i<=a[0];++i)
{
c=a[i];
a[i]=(a[i]*k+t)%10;
t=(t+c*k)/10;
}
if(t>0) a[++a[0]]=t;
}
void inmultire()
{
int j,i,t,c;
for(i=1;i<=a[0];++i)
{
for(j=1;j<=b[0];++j)
z[i+j-1]+=(a[i]*b[j]);
}
t=0;
for(i=1;i<=a[0]+b[0]-1;++i)
{
c=z[i];
z[i]=(z[i]+t)%10;
t=(c+t)/10;
}
if(t>0) { z[a[0]+b[0]]=t; z[0]=a[0]+b[0];}
else z[0]=a[0]+b[0]-1;
}
void add()
{
int c,t=0,i;
if(n[0]>z[0]) { for(i=z[0]+1;i<=n[0];++i) z[i]=0; z[0]=n[0];}
else {for(i=n[0]+1;i<=z[0];++i) n[i]=0; n[0]=z[0];}
for(i=1;i<=n[0];++i)
{
c=n[i];
n[i]=(n[i]+z[i]+t)%10;
t=(c+z[i]+t)/10;
}
if(t>0) n[++n[0]]=t;
}
FILE*g=fopen("sarpe.out","w");
void afisare()
{
int i;
for(i=n[0];i>=1;--i) fprintf(g,"%d",n[i]);
}
int main()
{
read();
if(ok==0) fprintf(g,"2");
else{
formA();
formB();
formN();
inmultA();
inmultire();
add();
afisare();
}
return 0;
}