Cod sursa(job #67998)

Utilizator razvi9Jurca Razvan razvi9 Data 26 iunie 2007 11:25:13
Problema Sarpe Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<stdio.h>
#include<string.h>
int a[1011],b[1011],d[1011],r[3001];
char c[1002];
int main()
{freopen("sarpe.in","r",stdin);
 freopen("sarpe.out","w",stdout);
 scanf(" %s ",c);
 for(int i=strlen(c)-1, j=1010;i>=0;i--,j--)
  a[j]=c[i]-'0';
 memcpy(b,a,sizeof(a));
 memcpy(d,a,sizeof(a));
 b[1010]--;
 int i=1010;
 while(b[i]==-1)
 {b[i]=9;
  i--;
  b[i]--;}
 d[1010]-=2;
 i=1010;
 while(d[i]<0)
 {d[i]=10+d[i];
  i--;
  d[i]--;}
 for(i=1010;i>=0;i--)
  for(int j=1010;j>=0;j--)
   {r[3000+i-1010+j-1010]+=b[i]*d[j];
    r[3000+i-1010+j-1010-1]+=r[3000+i-1010+j-1010]/10;
	r[3000+i-1010+j-1010]%=10;}
 for(i=3000;i>=0;i--)
 {r[i]*=2;}
 for(i=3000;i>0;i--)
  {r[i-1]+=r[i]/10;
   r[i]%=10;}
 for(i=1010;i>=0;i--)
 {a[i]*=4;}
 for(i=1010;i>0;i--)
 {a[i-1]+=a[i]/10;
  a[i]%=10;}
 for(i=1010;i>=0;i--)
 {r[2000-10+i]+=a[i];
  r[2000-10+i-1]+=r[2000-10+i]/10;
  r[2000-10+i]%=10;}
 i=2000-10;
 while(r[i]/10)
 {r[i-1]+=r[i]/10;
  r[i]%=10;
  i--;}
 for(i=0;i<=3000;i++)
  if(r[i]) break;
 for(;i<=3000;i++)
  printf("%d",r[i]);
 fclose(stdout);
 return 0;}