Cod sursa(job #38481)

Utilizator cos_minBondane Cosmin cos_min Data 25 martie 2007 20:24:56
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <stdio.h>
#include <string>
using namespace std;

#define in "next.in"
#define out "next.out"
#define dim 1000002

int size, nr[440];
int A[dim];
long long d=0, t=0;
char c[dim];
char d2[26];

int main()
{
    int k;
    char ch;
    size=0;
    k = 0;
    d=0;
    FILE *fin = fopen(in,"r");
    freopen(out,"w",stdout);
    
    fgets(c,dim-1,fin);
    fgets(d2,27,fin);
    
    for ( int j = 0; j <= strlen(d2); j++ )
        if ( d2[j] >= '0' && d2[j] <= '9' ) d *= 10, d += (int)d2[j]-48;
    
   // printf("%lld",d);
    
    while ( c[size] >= '0' && c[size] <= '9' ) size++;
    
    int i;
    size -= 1;
    
    for (i = 0; i <= size; i++ )  
        A[size-i+1] = (int)c[i]-48;
        
    A[0] = size+1;
    
    long long t = 0;
      
    for ( i = A[0]; i >= 1; i-- )  
    {
        t = (t * 10 + A[i] ) % d; 
    } 
    
    if ( t == 0 )
    {
         for ( i = A[0]; i >= 1; i-- ) 
             printf("%d",A[i]);
    }
    else
    {
        
        
        nr[0] = 0;
        long long v = d-t;
        
        while ( v ) { nr[0]++, nr[nr[0]] = v % 10, v /= 10; };
        
        long long q = 0;  
        for ( i = 1; i <= A[0] || i <= nr[0] || q; i++, q/=10 )  
               A[i] = (q += A[i] + nr[i]) % 10;  
        A[0] = i - 1;  
    
        for ( i = A[0]; i >= 1; i-- )
            printf("%d", A[i]);
        
    }
}