Cod sursa(job #41983)

Utilizator Mishu91Andrei Misarca Mishu91 Data 28 martie 2007 19:22:52
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
using namespace std;
#include<fstream>
#include<stdio.h>
#define ncmax 1000010

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

FILE *fin=fopen("next.in","r");
FILE *fout=fopen("next.out","w");

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;
   fgets(s,ncmax+1,fin);
   if(s[strlen(s)-1]=='\n') 
                 s[strlen(s)-1]=0;
  string_to_nrmare(s,n,nr);
  fgets(s,ncmax+1,fin);
   if(s[strlen(s)-1]=='\n') 
                 s[strlen(s)-1]=0;
  string_to_nrmare(s,d,nd);
  for(i=0;i<=nd-1;i++)
      a[i]=s[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--)  fprintf(fout,"%d", a[i]);
  fprintf(fout,"\n");
  fclose(fin);
  fclose(fout);
  return 0;
}