Cod sursa(job #464127)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 18 iunie 2010 21:13:08
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <cstdio>
#include <cstring>

#define file_in "next.in"
#define file_out "next.out"

int n;
long long r,d,x,aux;
char s[1012000];
int v[1012000];
int v1[102];

void citire()
{
    int i,st,dr;
    //freopen(file_in,"r",stdin);
    //freopen(file_out,"w",stdout);

    gets(s);
    n=strlen(s);
    for (i=0;i<n;++i)
         v[i+1]=s[i]-'0';
    //inverseaza vectoru
    st=1;
    dr=n;
    while(st<=dr)
    {
        aux=v[st];
        v[st]=v[dr];
        v[dr]=aux;
        st++;
        dr--;
    }
    scanf("%lld", &d);
}

long long mod(int a[], long long b)
{

    long long i,t=0;
    for (i=a[0];i>=1;--i)
         t=(t*10+a[i])%b;
    return t;
}

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 solve()
{
    int i;
    v[0]=n;
    r=mod(v,d);
    //printf("%lld\n", r);
    d=(d-r)%d;
    //printf("%lld\n", x);
    int nr=0;
    while(d)
    {
        v1[++v1[0]]=d%10;
        d/=10;
    }
    //v1[0]=nr;
    add(v,v1);

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

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;

}