Cod sursa(job #832093)

Utilizator vlad96Vlad Zuga vlad96 Data 9 decembrie 2012 20:36:33
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <string.h>

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

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

unsigned long Divide(unsigned long A[1000051], long long X)
/* A <- A/X */
{ int i;
  unsigned long R=0;

  for (i=A[0];i;i--)
    { A[i]=(R=10*R+A[i])/X;
      R%=X;
    }
  while (!A[A[0]] && A[0]>1) A[0]--;
  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);

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

    a = d - a;

    Add(v, a);

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

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

    fclose(fis2);
    return 0;
}