Cod sursa(job #338593)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 6 august 2009 11:59:19
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <iostream.h>
#include <stdio.h>
#include <fstream.h>
#define LG_MAX 1000001
typedef int BigNumber[LG_MAX];
BigNumber N;      // rez final= D * (N/D+1)
long long D,i,m;
char s[LG_MAX],temp;

void div (BigNumber a, long b)  //functie impartire nr mare la nr mic
{
      int i,t=0;
      for (i=a[0];i>0;i--,t%=b)
              a[i]=(t=t*10+a[i])/b;
      for (; a[0]>1 && !a[a[0]];a[0]--);
}

int mod (BigNumber a, int b)  //functie calculare rest
{
      int i,t=0;
      for (i=a[0];i>0;i--)
              t=(t*10+a[i])%b;
      return t;
}

void mul (BigNumber a, long b)  //functie impartire nr mare cu nr mic 
{
      int i,t=0;
      for (i=1;i<=a[0] || t;i++,t/=10)
              a[i]=(t+=a[i]*b)%10;
      a[0]=i-1;
}

int main()
{
    ifstream f("next.in");
    ofstream g("next.out");
    while (!f.eof() )
          {
          f.get(temp);  //citesc din fisier caracter cu caracter
          if ( (temp=='\r') || (temp=='\n') || (!isdigit(temp)) ) break;
          s[i]=temp;
          i++;
          }
    s[i]='\0';  //inchei sirul cu NULL
    N[0]=strlen(s); //calculez lungimea sirului
    for (i=N[0]-1;i>=0;i--)
        N[N[0]-i]=s[i]-'0';
    for (i=N[0]+1;i<LG_MAX;i++)
        N[i]=0;
   f>>D;
   f.close();
   m=mod(N,D);
   if (m!=0)
      {
      div (N,D);
      i=1;
      while(N[i]==9) 
         N[i++]=0;
      N[i]++;
      }
   mul (N,D);
   for (i=N[0];i>=1;i--)
       g<<N[i];
   g.close();
   return 0;
}