Cod sursa(job #832113)

Utilizator vlad96Vlad Zuga vlad96 Data 9 decembrie 2012 21:26:53
Problema Next Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>
#include <string.h>

int v[1000051];
long long d;
char s[1000001];
int i, j;

/*void Add(int A[1000051], long long B)
{   int i = 0,T=B;
    while (T)
    {
        A[++i] += T%10;
        T = T / 10;
        if ( A[i] > 9 )
        {
            A[i+1] += A[i]/10;
            A[i] %= 10;
        }
    }
    if ( i > A[0] )
        A[0] = i;
}*/

inline long long Divide(int A[1000051], long long X)
{
    int i;
    long long R=0;

    for(i = A[0]; i; --i)
        R = ((long long)(10 * R + A[i]))%X;

    return R;
}

int main ()
{
    FILE *fis = fopen ("next.in" ,"r");

    i = 0;
    fgets(s, 1000000, fis);

    v[0] = strlen(s) - 1;
    for ( j = strlen(s)-2, i = 1; j >= 0; i++, j -- )
        v[i] = s[j]-'0';

    fscanf(fis, "%lld", &d);

    fclose(fis);

    long long a = Divide(v, d);
    a = (d - a)%d;

    j = 0;
    for(i = 1; i <= v[0]; ++i)
    {
        v[i] += a % 10 + j;
        j = v[i] / 10;
        v[i] %= 10;
        a /= 10;
    }

    while(j)
        ++v[0], v[ v[0] ] = j % 10, j /= 10;
    //Add(v, a);

    FILE *fis2 = fopen ("next.out", "w");

    for ( i = v[0]; i >= 1; i -- )
        fprintf(fis2, "%d", v[i]);

    fprintf(fis2, "\n");

    fclose(fis2);
    return 0;
}