Pagini recente » Cod sursa (job #605395) | Cod sursa (job #2461610) | Cod sursa (job #727368) | Cod sursa (job #3161888) | Cod sursa (job #313676)
Cod sursa(job #313676)
#include <cstdio>
#include <cstring>
const int maxcif = 1000001;
FILE *in = fopen("next.in","r"), *out = fopen("next.out","w");
struct bignum
{
short *nr;
bignum()
{
nr = new short[maxcif];
for ( int i = 0; i < maxcif; ++i )
nr[i] = 0;
}
short &operator [](int x)
{
return nr[x];
}
};
bignum p;
long long d;
void read()
{
char buf[maxcif];
fscanf(in, "%s", buf);
fscanf(in, "%lld", &d);
int n = strlen(buf);
for ( int i = n - 1; i >= 0; --i )
p[ ++p[0] ] = buf[i] - '0';
}
long long getmod()
{
long long t = 0;
for ( int i = p[0]; i > 0; --i )
t = (t * 10 + p[i]) % d;
return t;
}
bignum makebig(long long t)
{
bignum ret;
while ( t )
{
ret[ ++ret[0] ] = t % 10;
t /= 10;
}
return ret;
}
bignum add(bignum x, bignum y)
{
int s = 0, c = 0;
bignum ret;
for ( int i = 1; i <= x[0] || i <= y[0] || c; ++i )
{
s = x[i] + y[i] + c;
ret[ ++ret[0] ] = s % 10;
c = s / 10;
}
return ret;
}
void print(bignum t)
{
for ( int i = t[0]; i > 0; --i )
fprintf(out, "%d", t[i]);
}
int main()
{
read();
long long diff = d - getmod();
bignum t = makebig(diff % d);
print(add(p, t));
return 0;
}