Pagini recente » Cod sursa (job #126623) | Cod sursa (job #310963) | Cod sursa (job #1874312) | Cod sursa (job #1616677) | Cod sursa (job #77805)
Cod sursa(job #77805)
#include<stdio.h>
#include<string.h>
#define baza 10
#define end 400
char c[102];
long t[402],v[402];
void normal(long *q,long n)
{
long i;
for(i=end;i>=end-n+1;i--)
{
q[i] += q[i+1]/baza;
q[i+1] %= baza;
}
q[0] = end-i;
while(q[i+1]> baza)
{
q[i] += q[i+1]/baza;
q[i+1] %= baza;
i--;
q[0]++;
}
}
void inmult(long *a,long *b)
{
long q[402],i,j;
memset(q,0,sizeof(q));
for(i=end-a[0]+1;i<=end;i++)
for(j=end-b[0]+1;j<=end;j++)
q[end-(end-i)-(end-j)]+=a[i]*b[j];
normal(q,a[0]+b[0]-1);
for(i=0;i<=end;i++)
a[i] = q[i];
}
void inmultscalar(long *a,long b)
{
long i;
for(i=end;i>=end-a[0]+1;i--)
a[i]*=2;
normal(a,a[0]);
}
void scade(long *a,long *b)
{
long i;
for(i=end;i>=end-a[0]+1;i--)
{
a[i]-=b[i];
if(a[i]<0)
{
a[i]+=baza;
a[i-1]--;
}
}
if(a[end-a[0]+1]==0) a[0]--;
}
void addscalar(long *a,long b)
{
a[end]+=b;
normal(a,a[0]);
}
int main()
{
freopen("sarpe.in","r",stdin);
freopen("sarpe.out","w",stdout);
scanf("%s",c);
long poz,i;
for(i=end-strlen(c)+1,poz = 0;i<=end;i++,poz++)
{
v[i] = c[poz]-'0' ;
t[i] = v[i];
}
v[0] = strlen(c);
t[0] = v[0];
inmult(t,v);
inmultscalar(t,2);
inmultscalar(v,2);
scade(t,v);
addscalar(t,4);
for(i=end-t[0]+1;i<=end;i++)
printf("%ld",t[i]);
if(t[0]==0) printf("2");
printf("\n");
return 0;
}