Cod sursa(job #71789)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 11 iulie 2007 17:12:20
Problema Sarpe Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream.h>
long a[1000],b[1000],c[100000],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 (a[1]<0){
int w=1;
a[1]=9;
  while (a[w]==9){
       a[w+1]--;
      w++;}     }
if (b[0]>=2)
   b[0]-=2;
else {
  b[1]--;
  b[0]=10-2+b[0];}
if (b[1]<0){
int w=1;
b[1]=9;
  while (b[w]==9){
       b[w+1]--;
      w++;}     }
inmultire(a,b,c,nr,nr);
int t=0;
for (long r=0;r<=nr*2;r++){
     c[r]=c[r]*2+t;
     t=c[r]/10;
     c[r]=c[r]%10;}
if (t>0)        {
c[(nr-1)*2+1]=t;
nr=(nr-1)*2+1;}
else
nr=(nr-1)*2;
t=0;
for (long e=0;e<=2*nr;e++){
    c[e]=c[e]+d[e]+t;
    t=c[e]/10;
    c[e]=c[e]%10;}
if (t>0)
c[nr++]=1;
long g=nr*2+1;
while (c[g]==0)
  g--;
 for (long p=g;p>=0;p--)
   fout<<c[p];
fout<<"\n";
fin.close();
fout.close();
return 0;
}