Cod sursa(job #71763)
#include<fstream.h>
long a[1000],b[1000],c[1000000],d[10000],nr=0;
void inmultire(long a[],long b[],long c[],long nr1,long nr){
for (long i=0;i<nr1;i++){
int t=0;
for (long j=0;j<nr;j++){
c[j+i]+=b[j]*a[i]+t;
t=c[j+i]/10;
c[j+i]=c[j+i]%10;}
if (t>0)
c[nr+i]=t; }
}
int main(){
ifstream fin("sarpe.in");
ofstream fout("sarpe.out");
char x;
while(!fin.eof()){
fin>>x;
a[nr++]=x-'0';}
nr--;
for (int i=0;i<nr/2;i++){
int aux=a[i];
a[i]=a[nr-i-1];
a[nr-i-1]=aux;}
for (int j=0;j<nr;j++)
b[j]=a[j];
long y[2];
y[0]=4;
inmultire(y,a,d,1,nr);
if (a[0]>=1)
a[0]-=1;
else {
a[1]--;
a[0]=9;}
if (b[0]>=2)
b[0]-=2;
else {
b[1]--;
b[0]=10-2+b[0];}
inmultire(a,b,c,nr,nr);
int u;
for (u=1010;u>=0;u--)
if (c[u]!=0)
break;
int t=0;
for (long r=0;r<=u;r++){
c[r]=c[r]*2+t;
t=c[r]/10;
c[r]=c[r]&10;}
if (t>0)
c[u++]=t;
t=0;
for (long e=0;e<u;e++){
c[e]=c[e]+d[e];
t=c[e]/10;
c[e]=c[e]%10;}
if (t>0)
c[u++]=1;
for (long p=u-1;p>=0;p--)
fout<<c[p];
fout<<"\n";
fin.close();
fout.close();
return 0;
}