Cod sursa(job #41872)

Utilizator Mishu91Andrei Misarca Mishu91 Data 28 martie 2007 17:45:24
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
using namespace std;
#include<fstream>
#define ncmax 1000010
#define ncd 20
char n[ncmax],d[ncd],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,ncd);
  string_to_nrmare(s,d,nd);
  for(i=0;i<=nd-1;i++)
      s[i]=a[i]=d[i];
  na=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;
}