Cod sursa(job #56489)

Utilizator anoukAnca Dumitrache anouk Data 29 aprilie 2007 17:49:54
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
//100 puncte
#include <stdio.h>

#define in "next.in"
#define out "next.out"
#define NMAX 1000005

long long D, R, rest;
char a[NMAX], b[NMAX], sir[NMAX];
int ind, n, m;

void Read();
void Solve();
long long mod(char A[], long long B);
void add( char A[], char B[] );

FILE *fout = fopen( out, "w" );

int main()
{
    Read();
    Solve();
    
    fclose( fout );
    return 0;
}

void Read()
{
     FILE *fin = fopen( in, "r" );
     char c; ind = 1;
     while ( fscanf( fin, "%c", &c ) && c != '\n' )
     {
           a[ind] = c - 48;
           ind++;
     }
     fscanf( fin, "%lld", &D );
     ind--;
     //a[0] = ind;
  
     fclose( fin );
}

void Solve()
{
     int i;
     n = 1;
     for ( i = ind; i >= 1; --i )
     {
         b[n] = a[i];
         n++;
     }
     n--;
     //b[0] = n;
     
     R = mod( b, D );
     rest = ( D - R ) % D;
     
     m = 1;
     while ( rest )
     {
           sir[m] = rest % 10;
           rest /= 10;
           m++;
     }
     m--;
     //sir[0] = m;
     add( b, sir );
     //AFISAREA
     for ( i = n; i >= 1; --i )
     {
         fprintf( fout, "%d", b[i] );
     }

}
 
long long mod(char A[], long long B)  
{  
     int i;
     long long t = 0;  
     for (i = n; i > 0; i--)  
             t = (t * 10 + A[i]) % B;  
     return t;  
}

void add(char A[], char B[])  
{  
      int i, t = 0;  
      for (i=1; i<=n || i<=m || t; i++, t/=10)  
              A[i] = (t += A[i] + B[i]) % 10;  
      n = i - 1;  
}