Pagini recente » Cod sursa (job #1182815) | Cod sursa (job #643881) | Cod sursa (job #229594) | Cod sursa (job #2592195) | Cod sursa (job #69453)
Cod sursa(job #69453)
#include <cstdio>
#include <string>
#include <algorithm>
#define fin "sarpe.in"
#define fout "sarpe.out"
#define Cmax 1000000
using namespace std;
int a[Cmax],b[1001];
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 adds(int a[],int b)
{
int i;
a[1]+=b;
for (i=1;a[i]>9;++i)
{
a[i]%=10;
++a[i+1];
}
if (i>a[0]+1) a[0]=i-1;
}
void sub(int a[],int b[])
{
int i,t=0;
for (i=1;i<=a[0];++i)
{
if (i>b[0]) b[i]=0;
a[i]=a[i]-t-b[i];
if (a[i]<0)
{
a[i]+=10;
t=1;
}
else
t=0;
}
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(b);
memcpy(a,b,sizeof(b));
multb(a,a);
sub(a,b);
adds(a,2);
mults(a,2);
if (b[0]==1 && b[1]==1)
{
a[0]=1;a[1]=2;
}
print(a);
return 0;
}