Cod sursa(job #893655)

Utilizator tannous.marcTannous Marc tannous.marc Data 26 februarie 2013 17:04:19
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream.h>
#include<string.h>
 
long A[2000005],n;
char c;
long long d,rest;
ifstream fin("next.in");
ofstream fout("next.out");
 
long long imparte()
{
    long long t=0,i;
    for(i=A[0];i>0;i--)
    {
        t=(t*10+A[i])%d;
    }
    return t;
}
void invers()
{
    long i,aux;
    for(i=1;i<=A[0]/2;i++)
    {
        aux=A[i];
        A[i]=A[A[0]-i+1];
        A[A[0]-i+1]=aux;
    }
}
 
int main()
{
    long i,trec=0,z,sv,sv1;
 
    while(fin.get(c))
        if(c!='\n')A[++A[0]]=c-'0';
        else {sv1=sv;sv=A[0];}
 
    for(i=sv1+1;i<=A[0];i++)
    {
     d=d*10+A[i];
     A[i]=0;
    }
    A[0]=A[0]-(A[0]-sv1);
 
    invers();
    rest=imparte();
 
    i=1;
    if(rest!=0)
    rest=d-rest;
    while(rest!=0)
    {
        z=A[i]+trec+rest%10;
        A[i]=z%10;
        trec=z/10;
        i++;
        rest/=10;
    }
    if(trec!=0)
        A[i]+=trec;
    while(A[i]>9)
    {
       trec=A[i]/10;
       A[i]=A[i]%10;
       A[i+1]=A[i+1]+trec;
       i++;
    }
        if(i>A[0]) A[0]=i;
 
    for(i=A[0];i>=1;i--)
        fout<<A[i];
    fout<<'\n';
     
    fout.close();
    return 0;
}