Cod sursa(job #2323599)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 19 ianuarie 2019 13:43:06
Problema Sarpe Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#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;
}