Pagini recente » Cod sursa (job #1525675) | Cod sursa (job #2107148) | Cod sursa (job #732290) | Cod sursa (job #1072190) | Cod sursa (job #74693)
Cod sursa(job #74693)
#include <stdio.h>
long a[1000002], ds[18];
long sr[18];
long long d;
long n;
void citire() {
freopen("next.in", "r" , stdin);
long nr = 0;
char x = getc(stdin);
while (x >= '0' && x <='9') {
a[++nr] = x - '0';
x = getc(stdin);
}
while (x < '0' || x > '9')
x = getc(stdin);
a[0] = nr;
nr = 0;
d = 0;
while (x >= '0' && x <='9') {
ds[++nr] = x - '0';
d = d * 10 + ds[nr];
x = getc(stdin);
}
ds[0] = nr;
fclose(stdin);
}
void invers(long a[]) {
for (long i = 1; i <= (a[0] >> 1); i ++) {
long aux = a[i];
a[i] = a[a[0] - i + 1];
a[a[0] - i + 1] = aux;
}
}
void adun(long b[]) {
long t = 0;
long n = (a[0] > b[0]) ? a[0] : b[0];
for (long i = 1; i <= n; i ++) {
long c = (i < 18) ? b[i] : 0;
long cif = a[i] + c + t;
a[i] = cif % 10;
t = cif / 10;
}
if (t > 0)
a[++n] = t;
a[0] = n;
}
void scad(long b[]) {
long n = (a[0] > b[0]) ? a[0] : b[0];
for (long i = 1; i <= n; i ++) {
long c = (i < 18) ? b[i] : 0;
a[i] -= c;
if (a[i] < 0 ) {
a[i] += 10;
a[i + 1] --;
}
}
while (n > 1 && a[n] == 0)
n --;
a[0] = n;
}
void afisare(){
freopen("next.out", "w", stdout);
for(long i = a[0] ; i > 0 ; i--)
printf("%ld", a[i]);
fclose(stdout);
}
long long mod(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, long 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(d);
if (r) {
fac_sir(r, sr);
scad(sr);
adun(ds);
}
afisare();
return 0;
}