Cod sursa(job #1542797)

Utilizator SilviuIIon Silviu SilviuI Data 5 decembrie 2015 17:43:23
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
#define nmax 1100010
using namespace std;
typedef long long int ll;
struct bigint {
    vector <short int> t;
    bigint() { t.resize(nmax); }
    int size() { return t[0]; }
    void print() {
        for (int i=t[0];i>=1;i--) printf("%d",t[i]);
        printf("\n");
    }
};
ll x,p; bigint a,b;
char s[nmax];
void addbigint(bigint &a)
{
    for (int i=1;s[i];i++) {
        a.t[0]=i; a.t[i]=s[i]-48;
    }
    for (int i=1;i<=a.t[0]/2;i++)
        swap(a.t[i],a.t[a.t[0]-i+1]);
}
void ad(bigint &a,ll x)
{
    a.t[0]=0;
    if (x==0) { a.t[0]=1; a.t[1]=0; return; }
    while (x>0) {
        a.t[0]++;
        a.t[a.t[0]]=x%10;
        x=x/10;
    }
}
bigint operator + (bigint &a,const bigint &b)
{
    int r=0;
    for (int i=1;i<=max(a.t[0],b.t[0]);i++) {
        int bb=(a.t[i]+b.t[i]+r); a.t[i]=bb%10; r=bb/10;
    }
    a.t[0]=max(a.t[0],b.t[0]);
    if (r>0) a.t[0]++,a.t[a.t[0]]=r;
    return a;
}
ll operator % (const bigint &a,ll x)
{
    ll r=0;
    for (int i=a.t[0];i>=1;i--) r=(1LL*10*r+a.t[i])%x;
    return r;
}
int main() {
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
gets(s+1);
scanf("%lld",&x);
addbigint(a); p=a%x;
if (p==0) { puts(s+1); return 0; }
ad(b,x-p); a=a+b;
a.print();
return 0;
}