Cod sursa(job #832085)

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

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

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;
    //fscanf(fis, "%c", &c);
    fgets(s, 1000000, fis);
    i = j = strlen(s) - 2;
    while ( s[i] != '\n' && i >= 0 )
    {
        v[0] ++;
        v[j-i+1] = s[i] - '0';
        i --;
    }

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

    fclose(fis);

    long long a = Divide(v, d);
    i = j = strlen(s) - 2;
    v[0]=0;
    while ( s[i] != '\n' && i >= 0 )
    {
        v[0] ++;
        v[j-i+1] = s[i] - '0';
        i --;
    }
    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;
}