Pagini recente » Cod sursa (job #1083919) | Cod sursa (job #647354) | Cod sursa (job #2548773) | Cod sursa (job #796510) | Cod sursa (job #1408668)
#include <fstream>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
char n[10003];
void Mult(short 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;
}
}
void MultHuge(short A[],short B[],short 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 Add(short A[], short B[])
{ int i,T=0;
if (B[0]>A[0])
{ for (i=A[0]+1;i<=B[0];) A[i++]=0;
A[0]=B[0];
}
else for (i=B[0]+1;i<=A[0];) B[i++]=0;
for (i=1;i<=A[0];i++)
{ A[i]+=B[i]+T;
T=A[i]/10;
A[i]%=10;
}
if (T) A[++A[0]]=T;
}
int main()
{
ifstream f("sarpe.in");
ofstream g("sarpe.out");
short a,b[10003],i,c[10003],d[10003],e[100003];
i=0;
while(f>>n[i])
i++;
a=i;
b[0]=a;
for(i=a;i>=1;i--)
{
b[a-i+1]=int(n[i-1]-'0');
c[a-i+1]=b[a-i+1];
d[a-i+1]=b[a-i+1];
}
c[0]=a;
d[0]=a;
Mult(b,4);
i=1;
while(c[i]==0)
{
c[i]=9;
i+=1;
}
c[i]-=1;
if(c[a]==0)
c[0]-=1;
i=1;
int
o=2;
while(o>0)
{
if(d[i]>0)
{
if(d[i]>=o)
{
d[i]-=o;
o=0;
}
else
{
d[i]=9;
o=1;
}
}
else
d[i]=10-o;
i++;
}
int t=0;
for(i=1;i<=d[0];i++)
{
d[i]=(d[i]*2+t);
t=d[i]/10;
d[i]%=10;
}
if(t!=0)
{
d[0]+=1;
d[0]=t;
}
MultHuge(c,d,e);
Add(e,b);
for(i=1;i<=e[0];i++)
g<<e[e[0]-i+1];
f.close();
g.close();
return 0;
}