Pagini recente » Cod sursa (job #511241) | Cod sursa (job #2302491) | Cod sursa (job #207305) | Cod sursa (job #1256771) | Cod sursa (job #2323599)
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin ("sarpe.in");
ofstream fout("sarpe.out");
char c[2001];
int v[2001],u[2001],sol[4002];
void MultHuge(int A[], int B[], int C[])
{ int i,j,T=0;
C[0]=A[0]+B[0]-1;
for (i=1;i<=A[0]+B[0];) C[i++]=0;
for (i=1;i<=A[0];i++)
for (j=1;j<=B[0];j++)
C[i+j-1]+=A[i]*B[j];
for (i=1;i<=C[0];i++)
{ T=(C[i]+=T)/10;
C[i]%=10;
}
if (T) C[++C[0]]=T;
}
void Mult(int H[], unsigned long X)
{ int i;
unsigned long T=0;
for (i=1;i<=H[0];i++)
{ H[i]=H[i]*X+T;
T=H[i]/10;
H[i]=H[i]%10;
}
while (T)
{ H[++H[0]]=T%10;
T/=10;
}
}
int aux,i;
int main ()
{
fin>>c;
aux=strlen(c);
if(c[0]=='1'&&aux==1){fout<<2; return 0;}
for(i=aux-1;i>=0;i--) v[++v[0]]=c[i]-'0';
memcpy(u,v,sizeof(u));
i=1;v[1]--;
while(v[i]==-1) v[i]=9,v[++i]-=1;
if(v[i]==0&&i==v[0]) v[0]--;
MultHuge(v,u,sol);
Mult(sol,2);
i=1;sol[1]+=4;
while(sol[i]>10) sol[i]=sol[i]-10,sol[++i]+=1;
if(i>v[0]) v[0]++;
for(i=sol[0];i>=1;i--) fout<<sol[i];
return 0;
}