Cod sursa(job #71763)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 11 iulie 2007 16:01:22
Problema Sarpe Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#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;
}