Pagini recente » Cod sursa (job #1578366) | Istoria paginii runda/lsp_x/clasament | Cod sursa (job #216904) | Cod sursa (job #2204396) | Cod sursa (job #74686)
Cod sursa(job #74686)
#include <stdio.h>
int a[1000002], ds[1000002];
int sr[1000002];
long long d;
long n;
void citire() {
freopen("next.in", "r" , stdin);
long nr = 0;
char x = getc(stdin);
while (x != '\n') {
a[++nr] = x - '0';
x = getc(stdin);
}
a[0] = nr;
nr = 0;
x = getc(stdin);
d = 0;
while (x >= '\n' && !feof(stdin)) {
ds[++nr] = x - '0';
d = d * 10 + ds[nr];
x = getc(stdin);
}
ds[0] = nr;
fclose(stdin);
}
void invers(int a[]) {
for (long i = 1; i <= (a[0] >> 1); i ++) {
int aux = a[i];
a[i] = a[a[0] - i + 1];
a[a[0] - i + 1] = aux;
}
}
void adun(int a[], int b[]) {
long t = 0;
long n = (a[0] > b[0]) ? a[0] : b[0];
for (int i = 1; i <= n; i ++) {
long cif = a[i] + b[i] + t;
a[i] = cif % 10;
t = cif / 10;
}
if (t > 0)
a[++n] = t;
a[0] = n;
}
void scad(int a[], int b[]) {
long n = (a[0] > b[0]) ? a[0] : b[0];
for (long i = 1; i <= n; i ++) {
a[i] -= b[i];
if (a[i] < 0 ) {
a[i] += 10;
a[i + 1] --;
}
}
while (n > 1 && a[n] == 0)
n --;
a[0] = n;
}
void afisare(int a[]){
freopen("next.out", "w", stdout);
for(long i = a[0] ; i > 0 ; i--)
printf("%d", a[i]);
fclose(stdout);
}
long long mod(int a[], long long d){
long long r = 0;
for (long i = a[0]; i >=1; i-- )
r = (r * 10 + a[i]) %d;
return r;
}
void fac_sir(long long r, int sr[18]){
sr[0] = 0;
for(; r; r /= 10 )
sr[++sr[0]] = r % 10;
}
int main () {
citire();
invers(a);
invers(ds);
long long r = mod(a, d);
fac_sir(r, sr);
scad(a, sr);
adun(a, ds);
afisare(a);
return 0;
}