Cod sursa(job #37999)

Utilizator TheoTheodor Iacomi Theo Data 25 martie 2007 13:16:07
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<fstream.h>
#include<string.h>
#include<ctype.h>
#include<stdio.h>
ifstream f("next.in");
ofstream g("next.out");
int main()
{long n=-1,i,m=-1,aux,n1,j,rest;
 char *p,*d,*v;
 p="\0";
 do{p[++n]=f.get();p[n+1]='\0';}while(isdigit(p[n]));
 p[n]='\0';
 for(i=0;i<n/2;i++){aux=p[i];p[i]=p[n-1-i];p[n-1-i]=aux;}
 v = new char;
 for(i=0;i<n;i++){
 aux=p[i];
 v[i]=aux;}
 d = new char; do{d[++m]=f.get();d[m+1]='\0';}while(!f.eof());
 d[m]='\0';n1=n;v[n1]='\0';
 for(i=0;i<m/2;i++) {aux=d[i];d[i]=d[m-1-i];d[m-1-i]=aux;}
 do{for(i=n1-1;i>=0;i--) if(isdigit(d[i]))
	if(long(v[i])>=long(d[i])) v[i]=char(48+long(v[i])-long(d[i]));
	else{v[i]=char(48+10+long(v[i])-long(d[i]));
	     if(v[i+1]!='0') v[i+1]=char(long(v[i+1])-1);
		else {j=i+1;do{v[j]='9';j++;}while(v[j]=='0' && j<n1);
		      if(j<n1) v[j]=char(long(v[j])-1);}
	}
    i=n1-1;while(v[i]=='0') {n1--;i--;}
 }while(m<=n1);
 for(i=m-1;i>=0;i--) if(isdigit(v[i]))
	if(long(d[i])>=long(v[i])) d[i]=char(48+long(d[i])-long(v[i]));
	else{d[i]=char(48+10+long(d[i])-long(v[i]));
	     if(d[i+1]!='0') d[i+1]=char(long(d[i+1])-1);
		else {j=i+1;do{d[j]='9';j++;}while(d[j]=='0' && j<n1);
		      if(j<n1) d[j]=char(long(d[j])-1);}
	}
 rest=0;
 for(i=n-1;i>=0;i--) if(isdigit(p[i])){
      rest=(long(p[i])+long(d[i])-48)/10;
      p[i]=char(48+(long(p[i])+long(d[i])-48)%10);j=i;
      while(rest!=0){j++;aux=((long(p[j])+rest)-48)/10;
      p[j]=char((long(p[i])+rest)%10);rest=aux;}
      }
 i=n-1;
 while(i>=0 && p[i]=='0'){n--;i--;}
 for(i=n-1;i>=0;i--)g<<p[i];
 g<<endl;
 delete v; delete d;
 f.close();g.close();return 0;}