Pagini recente » Cod sursa (job #3147907) | Cod sursa (job #2190910) | Cod sursa (job #1733118) | Cod sursa (job #379467) | Cod sursa (job #44715)
Cod sursa(job #44715)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define fin "next.in"
#define fout "next.out"
#define NMAX 1000003
int N[NMAX];
long long D;
FILE *f,*g;
void write(int A[])
{
g = fopen(fout,"w");
for ( int i = A[0] ; i ; --i)
fprintf(g,"%d",A[i]);
fclose(g);
}
void reverse(int A[])
{
int tmp;
for ( int i = 1 ; i<=A[0] / 2 ; ++i )
tmp = A[i] , A[i] = A[A[0] - i + 1] , A[A[0] - i + 1] = tmp;
}
void readData()
{
f = fopen(fin,"r");
char c;
while((c=fgetc(f)) >= '0' & c <= '9')
N[++N[0]] = c - '0';
reverse(N);
fscanf(f,"%Ld",&D);
}
void attrib(int A[] , long long x) // A = x
{
do
{
A[++A[0]] = x % 10;
x /= 10;
}
while(x);
}
void add(int A[] , int B[]) // A = A + B
{
int i,t;
for ( i = 1 , t = 0 ;i<=A[0] | i<=B[0] | t ; ++i,t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i-1;
}
void mod(int X[], long long &Y, long long &R) // R = X % Y
{
for ( int i = X[0] ; i ; --i )
{
R = R * 10 + X[i];
while(R>=Y) R-=Y;
}
}
int C1[NMAX];
void solve()
{
long long r = 0;
mod(N,D,r);
if(r)
{
attrib(C1,D - r);
add(N,C1);
}
write(N);
}
int main()
{
readData();
solve();
return 0;
}