Pagini recente » Cod sursa (job #2205240) | Cod sursa (job #1753045) | Cod sursa (job #2528016) | Cod sursa (job #231294) | Cod sursa (job #320690)
Cod sursa(job #320690)
#include <stdio.h>
#include <string.h>
FILE *f,*s;
char v[10001];
int n[10001],rezp[10001],c[10001],i,j;
void suma(int x[10001], int y[10001])
{
int T=0;
if(y[0]>x[0])
{
for (i=x[0]+1; i<=y[0]; i++) x[i]=0;
x[0]=y[0];
}
else
for (i=y[0]+1; i<=x[0]; i++) y[i]=0;
for (i=y[0]+1; i<=x[0]; i++) y[i]=0;
for (i=1;i<=x[0];i++)
{
x[i]+=y[i]+T;
T=x[i]/10;
x[i]%=10;
}
if (T)
{
x[0]++;
x[x[0]]=T;
}
}
void scadere(int x[10001],int y[10001])
{
int T=0;
for(i=y[0]+1;i<=x[0];)
y[i++]=0;
for(i=1;i<=x[0];i++)
{
x[i]=x[i]-(y[i]+T);
if(x[i]<0)
T=1;
else
T=0;
if(T)
x[i]+=10;
}
while (!x[x[0]])
x[0]--;
}
void inmultire(int x[10001], int y)
{
unsigned long T=0;
for(i=1;i<=x[0];i++)
{
x[i]=x[i]*y+T;
T=x[i]/10;
x[i]=x[i]%10;
}
while (T)
{
x[0]++;
x[x[0]]=T%10;
T/=10;
}
}
void inmultire2(int x[10001], int y[10001])
{
int T=0, R[10001];
R[0]=x[0]+y[0]-1;
for(i=1;i<=x[0]+y[0];) R[i++]=0;
for (i=1;i<=x[0];i++)
for (j=1;j<=y[0];j++)
R[i+j-1]+=x[i]*y[j];
for (i=1;i<=R[0];i++)
{
R[i]+=T;
T=R[i]/10;
R[i]%=10;
}
if (T)
{
R[0]++;
R[R[0]]=T;
}
x[0] = R[0];
for(i=1;i<=x[0];i++)
x[i]=R[i];
}
int main()
{
f=fopen("sarpe.in","r");
s=fopen("sarpe.out","w");
fscanf(f,"%s",&v);
n[0]=strlen(v);
rezp[0]=n[0];
j=1;
for(i=n[0]-1;i>=0;i--)
{
n[j]=int(v[i])-48;
rezp[j]=n[j];
j++;
}
c[0]=1;
c[1]=1;
scadere(rezp,c);
if(rezp[0]==0)
rezp[0]=1;
c[1]=2;
scadere(n,c);
if(n[0]==0)
n[0]=1;
inmultire2(rezp,n);
inmultire(rezp,2);
suma(n,c);
inmultire(n,4);
suma(n,rezp);
for(i=n[0];i>0;i--)
fprintf(s,"%d",n[i]);
fclose(s);
return 0;
}