Cod sursa(job #329995)

Utilizator freak93Adrian Budau freak93 Data 8 iulie 2009 13:28:09
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<fstream>
#include<cstring>
#define maxn 1000005

using namespace std;

ifstream f("next.in");
ofstream g("next.out");

int a[maxn],b[maxn],d,i;

void add(int A[], int B[])
{
      long long i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}

void mul(int A[],int B)
{
      long long i, t = 0;
      for (i = 1; i <= A[0] || t; i++, t /= 10)
              A[i] = (t += A[i] * B) % 10;
      A[0] = i - 1;
}

void div(int A[], int B)
{
      long long i, t = 0;
      for (i = A[0]; i > 0; i--, t %= B)
              A[i] = (t = t * 10 + A[i]) / B;
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}

int mod(int A[], int B)
{
      long long i, t = 0;
      for (i = A[0]; i > 0; i--)
              t = (t * 10 + A[i]) % B;
      return t;
}

int main()
{
    while(1)
    {
        a[++a[0]]=f.get();
        a[a[0]]-='0';
        if(a[a[0]]<0||a[a[0]]>9)
        {
            a[a[0]--]=0;
            break;
        }
    }

    for(i=a[0];i;--i)
        b[++b[0]]=a[i];
    f>>d;
    i=0;
    if(mod(b,d)) i=1;

    div(b,d);

    memset(a,0,sizeof(a));
    a[0]=a[1]=1;


    if(i)add(b,a);
    mul(b,d);

    for(i=b[0];i;--i)
        g<<b[i];
    g<<"\n";
    f.close();
    g.close();

    return 0;
}