Cod sursa(job #480518)

Utilizator miculprogramatorA Cosmina - vechi miculprogramator Data 28 august 2010 11:46:50
Problema Next Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <stdio.h>
using namespace std;

#define MAX 1000005

char ch;
int n[MAX], r[100];
long long d, rest, j;
int i;

void afisare (int nr[])
{
    FILE *g = fopen ("next.out","w");

    for (i=nr[0]; i>=1; --i)
        fprintf (g, "%d", nr[i]);
    fprintf (g, "\n");
}

long long mod_nr_mic (int nr[], long long x)
{
    long long t = 0;
    for (i=nr[0]; i>=1; --i)
        t = (long long) (t * 10LL + nr[i]) % x;

    return t;
}

void adunare (int nr1[], int nr2[])
{
    int suma_cf = 0, suma_tr = 0, cf = 0;

    for (i=1; i<=nr1[0] || i<=nr2[0]; ++i, ++cf)
    {
        suma_cf = nr1[i] + nr2[i] + suma_tr;
        nr1[i] = suma_cf % 10;
        suma_tr = suma_cf / 10;
    }
    if (suma_tr)
    {
        nr1[i] = suma_tr;
        cf ++;
    }
    nr1[i] = cf;
}

int is_number (char ch)
{
    if (ch >= '0' && ch <= '9')
        return 1;
    return 0;
}

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

    fscanf (f,"%c", &ch);
    while (ch != ' ' && ch != '\n')
    {
        if (is_number (ch))
        {
            n[0] ++;
            n[n[0]] = ch - '0';
        }
        fscanf (f,"%c", &ch);
    }
    for (i=1; i<=n[0]/2; ++i)
    {
        j = n[i];
        n[i] = n[n[0]-i+1];
        n[n[0]-i+1] = j;
    }

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

    rest = mod_nr_mic (n, d);
    j = (d - rest ) % d;
    while (j)
    {
        r[0] ++;
        r[r[0]] = j % 10;
        j /= 10;
    }
    adunare (n, r);

    afisare (n);

    fclose (f);
    return 0;
}