Pagini recente » Cod sursa (job #579511) | Cod sursa (job #826904) | Cod sursa (job #1624204) | Cod sursa (job #400094) | Cod sursa (job #69450)
Cod sursa(job #69450)
#include <cstdio>
#include <string>
#include <algorithm>
#define fin "sarpe.in"
#define fout "sarpe.out"
#define Cmax 2000000
using namespace std;
int a[Cmax],b[Cmax],c[Cmax];
void read(int a[])
{
int i;
char buff;
buff=getc(stdin);
a[0]=0;
while (buff!='\n' && buff!=EOF)
{
if (buff >= '0' && buff <='9')
a[++a[0]]=buff-'0';
buff=getc(stdin);
}
for (i=1;i<=a[0]/2;++i)
swap(a[i],a[a[0]-i+1]);
}
void mults(int a[],int b) // mare cu mic
{
int i,t=0;
for (i=1;i<=a[0] || t;++i,t/=10)
a[i]=(t=a[i]*b+t)%10;
a[0]=i-1;
}
void multb(int a[],int b[]) //mare cu mare
{
int i,j,t,c[Cmax];
memset(c,0,sizeof(c));
for (i=1;i<=a[0];++i)
{
for (t=0,j=1;j<=b[0] || t;++j,t/=10)
c[i+j-1]=(t+=c[i+j-1]+a[i]*b[j])%10;
if (i+j-2 > c[0]) c[0]=i+j-2;
}
memcpy(a,c,sizeof(c));
}
void add(int a[],int b[])
{
int i,t=0;
for (i=1;i<=a[0] || i<=b[0] || t;++i,t/=10)
a[i]=(t+=a[i]+b[i])%10;
a[0]=i-1;
}
void subs(int a[],int b) //b e cifra
{
int i;
a[1]-=b;
for (i=1;i<=a[0] && a[i]<0;++i)
if (a[i]<0)
{
a[i]+=10;
--a[i+1];
}
for (;a[a[0]]==0 && a[0]>1;--a[0]);
}
void print(int a[])
{
int i;
for (i=a[0];i>0;--i)
printf("%d",a[i]);
printf("\n");
}
int main()
{
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
read(a);
memcpy(b,a,sizeof(a));
memcpy(c,a,sizeof(a));
mults(a,4);
subs(b,2);
subs(c,1);
multb(b,c);
mults(b,2);
add(a,b);
print(a);
return 0;
}