Pagini recente » Cod sursa (job #231675) | Cod sursa (job #1975764) | Cod sursa (job #1919196) | Cod sursa (job #1278398) | Cod sursa (job #831260)
Cod sursa(job #831260)
#include<stdio.h>
#include<string.h>
using namespace std;
#define MAXF 1000005
typedef int Huge[ MAXF ];
int i, j, len;
long long int D, r;
Huge a, aux;
char S[ MAXF ];
inline void Add(Huge a, Huge b)
{
int i, T = 0;
if(b[0] > a[0])
{
for(i = a[0] + 1; i <= b[0]; ++i)
a[i] = 0;
a[0] = b[0];
}
for(i = 1; i <= a[0]; ++i)
a[i] += b[i] + T, T = a[i] / 10, a[i] %= 10;
while(T)
++a[0], a[ a[0] ] = T % 10, T /= 10;
}
inline void AtribValue(Huge a, int x)
{
for(int i = 1; i <= a[0]; ++i)
a[i] = 0;
if(!x)
{
a[0] = 1;
return;
}
a[0] = 0;
while(x)
++a[0], a[ a[0] ] = x % 10, x /= 10;
}
inline int Divide(Huge a, int x)
{
int i, r = 0, T = 0;
for(i = a[0]; i; --i)
{
r = 10 * r + a[i];
a[i] = r / x;
r %= x;
}
while(!a[ a[0] ] && a[0] > 1)
--a[0];
return r;
}
int main()
{
FILE *f = fopen("next.in", "r");
fgets(S, 1000003, f);
fscanf(f, "%I64d", &D);
fclose(f);
len = strlen(S) - 2;
a[0] = aux[0] = len + 1;
for(i = len, j = 1; i >= 0; --i, ++j)
a[j] = aux[j] = S[i] - '0';
r = D - Divide(aux, D);
AtribValue(aux, r);
Add(a, aux);
FILE *g = fopen("next.out", "w");
for(i = a[0]; i; --i)
fprintf(g, "%d", a[i]);
fprintf(g, "\n");
fclose(g);
return 0;
}