Cod sursa(job #41830)

Utilizator Mishu91Andrei Misarca Mishu91 Data 28 martie 2007 16:58:04
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
using namespace std;
#include<fstream>
#define ncmax 1000010

char n[ncmax],d[ncmax],s[ncmax],a[ncmax];
int nr,nd,ns,na;

ifstream fin("next.in");
ofstream fout("next.out");

void string_to_nrmare(char s[ncmax],char a[ncmax],int &na)
{
   na=strlen(s);
   int i;
   for(i=0;i<na;i++)
          a[na-i-1]=s[i]-'0';
}

void aduna(char a[ncmax],int na,
           char b[ncmax],int nb,
           char c[ncmax],int &nc)
{
           
    nc=na;
    if(nb>nc)nc=nb;
    int t=0,i;
    for(i=0;i<nc;i++)
        {
           c[i]=(a[i]+b[i]+t)%10;
           t=(a[i]+b[i]+t)/10;        
         }
    if(t) c[nc++]=t;
}

int compar(char a[ncmax],int na,
              char b[ncmax],int nb)
{
  int i; 
  if(na>nb) return 1;
  if(na==nb) 
  {
    for(i=na-1;i>=0;i--) if(b[i]>a[i]) return 0;
    return 1;
  }
  return 0;
} 
         
          
int main()
{
  int i;
  fin.get(s,ncmax);
  string_to_nrmare(s,n,nr);
  fin.get();
  fin.get(s,ncmax);
  string_to_nrmare(s,d,nd);
  for(i=0;i<=nd-1;i++)
      a[i]=d[i];
  na=nd;
  for(i=0;i<=nd-1;i++)
      s[i]=d[i];
  ns=nd;
  while(compar(n,nr,a,na))
  {
    aduna(d,nd,s,ns,a,na);
    for(i=0;i<=na;i++)
      s[i]=a[i];
    ns=na;
  }
  for(i=na-1;i>=0;i--)  fout<<int(a[i]);
  fout<<"\n";
  fin.close();
  fout.close();
  return 0;
}