Pagini recente » Cod sursa (job #1160145) | Cod sursa (job #3283759) | Cod sursa (job #2157054) | Mihnea Andreescu | Cod sursa (job #37546)
Cod sursa(job #37546)
#include <stdio.h>
#include <memory.h>
#define N_CIFS 1000000
#define D_CIFS 18
void div(int A[], long * lA, long long B) {
long long i, t = 0;
for (i = *lA; i > 0; i--, t %= B)
A[i] = (t = t * 10 + A[i]) / B;
for (; *lA > 1 && !A[*lA]; *lA--);
}
void mul(int A[], long * lA, long long B) {
long long i, t = 0;
for (i = 1; i <= *lA || t; i++, t /= 10)
A[i] = (t += A[i] * B) % 10;
*lA = i - 1;
}
char eqal(int A[], long lA, int B[], long lB) {
if (lA!=lB) return 0;
else {
for (long i=1; i<=lA; i++) if (A[i]!=B[i]) return 0;
};
return 1;
};
void add(int A[], long * lA, long long B) {
long long i=1, t=0, nt;
t=B;
// A[1]+=B%10;
while (t!=0) {
if (i>*lA) A[i]=0;
nt=(A[i]+t)/10;
A[i]=(A[i]+t)%10;
t=nt;
i++;
};
i--;
if (i>*lA) *lA=i;
};
int main (void) {
FILE * fi = fopen("next.in","rt");
FILE * fo = fopen("next.out","wt");
int N[N_CIFS];
long cN=0;
int Np[N_CIFS];
long cNp=0;
long long d;
memset(N,0,sizeof(N));
char c;
do {
c=fgetc(fi);
if (c!='\n') {
N[N_CIFS-(++cN)]=c-'0';
};
} while (c!='\n');
memmove(&N[1],&N[N_CIFS-cN],sizeof(int)*(cN));
// for (int i=1; i<=5; i++) printf("%d ",N[i]);
fscanf(fi,"%lld",&d);
memcpy(Np,N,sizeof(N)); cNp=cN;
div(N,&cN,d);
mul(N,&cN,d);
if (!eqal(N,cN,Np,cNp)) {
add(N,&cN,d);
};
for (long i=cN; i>=1; i--) printf("%d",N[i]); printf("\n");
fclose(fi); fclose(fo);
return 0;
};