Pagini recente » Cod sursa (job #1709052) | Cod sursa (job #1318221) | Cod sursa (job #1648001) | Cod sursa (job #1411743) | Cod sursa (job #1408628)
#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=1;i<=a;i++)
{
b[i]=int (n[i-1]-'0');
c[a-i+1]=b[i];
d[a-i+1]=b[i];
}
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++;
}
/* for(i=1;i<=d[0];i++)
g<<d[i];*/
MultHuge(c,d,e);
Add(e,b);
for(i=1;i<=e[0];i++)
g<<e[i];
f.close();
g.close();
return 0;
}