Cod sursa(job #976057)

Utilizator sddddgjdZloteanu Anastasia sddddgjd Data 22 iulie 2013 14:26:24
Problema Next Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<stdio.h>
int v[1000009];
int x[1000009];
long long mod(int A[], long long B)
{
      int i;
      long long t = 0;
      for (i = 1; i <= A[0]; i++)
              t = (t * 10 + A[i]) % B;
      return t;
}
void add(int B[])
{
      int i;
      long long t = 0;
      int max=v[0];

        max=B[0];
      for (i=1; i<=v[0] || i<=B[0] || t; i++, t/=10)
              v[i] = (t += v[i] + B[i]) % 10;
      v[0] = i - 1;
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("next.in","r");
    fout=fopen("next.out","w");
    char c=fgetc(fin);
    int cont=1;
    while(c!='\n')
    {
        v[cont]=(c-'0');
        cont++;
        c=fgetc(fin);
    }
    v[0]=cont-1;
    long long d;
    fscanf(fin,"%lld",&d);
    long long rest=mod(v,d);
    if(rest!=0)
    {
    rest=d-rest;
    cont=0;
    while(rest!=0)
    {
        cont++;
        x[cont]=rest%10;
        rest/=10;
    }
    x[0]=cont;
    int i;
    for(i=1;i<=v[0]/2;i++)
    {
        int aux=v[i];
        v[i]=v[v[0]-i+1];
        v[v[0]-i+1]=aux;
    }
    add(x);
    for(cont=v[0];cont>=1;cont--)
        fprintf(fout,"%d",v[cont]);
    }
    else
        for(cont=1;cont<=v[0];cont++)
            fprintf(fout,"%d",v[cont]);
    return 0;
}