Pagini recente » Cod sursa (job #2007311) | Cod sursa (job #2664584) | Cod sursa (job #2477456) | Cod sursa (job #1642939) | Cod sursa (job #1879663)
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
char n1[1000001], d1[16];
int n[1000001], d[16], cpy[1000001];
FILE * g = fopen("next.out", "w");
ifstream f("next.in");
void adunare(int &nrn1, int &nrd)
{
int ct = 0, suma, i, j;
i = nrn1;
j = nrd;
while(i >= 0 && j >= 0) {
suma = n[i] + d[j] + ct;
ct = suma / 10;
n[i] = suma % 10;
--i;
--j;
}
if (i >= 0)
{
suma = n[i] + ct;
ct = suma / 10;
n[i] = suma % 10;
}
if(ct) {
for (int i = nrn1; i >= 0; --i)
n[i + 1] = n[i];
n[0] = 1;
++nrn1;
}
}
int verif(int nrn, int nrd)
{
int stop = 0;
if (nrn < nrd)
return 0;
if (nrn == nrd)
for (int i = 0; i <= nrn && !stop; ++i)
if (cpy[i] < d[i])
stop = 1;
if (stop == 1)
return 0;
return 1;
}
void scadere_d(int &nrn, int &nrd)
{
int in, jn;
in = nrn;
jn = nrd;
while (in >= 0 && jn >= 0) {
if (d[jn] >= cpy[in])
d[jn] -= cpy[in];
else {
--d[jn - 1];
d[jn] += 10 - cpy[in]; }
--in;
--jn;
}
if (d[0] == 0) {
for (int i = 1; i <= nrd; ++i)
d[i - 1] = d[i];
--nrd;
}
}
void scadere(int &nrn, int &nrd)
{
int in, jn;
in = nrn;
jn = nrd;
while (in >= 0 && jn >= 0) {
if (cpy[in] >= d[jn])
cpy[in] -= d[jn];
else {
--cpy[in - 1];
cpy[in] += 10 - d[jn]; }
--in;
--jn;
}
if (cpy[0] == 0) {
for (int i = 1; i <= nrn; ++i)
cpy[i - 1] = cpy[i];
--nrn;
}
}
int divi(int &nrn, int nrd)
{
int stop = 0;
for (int i = 0; i <= nrn; ++i)
cpy[i] = n[i];
while (verif(nrn, nrd)) {
scadere(nrn, nrd);
}
for (int i = 0; i <= nrn && !stop; ++i)
if (cpy[i])
stop = 1;
if (stop)
return 0;
return 1;
}
void cautare(int nrn, int nrd)
{
int nrn1 = nrn;
divi(nrn, nrd);
scadere_d(nrn, nrd);
adunare(nrn1, nrd);
for (int i = 0; i <= nrn1; ++i)
fprintf(g, "%d", n[i]);
}
void citire(int &nrn, int &nrd)
{
f.getline(n1, sizeof(n1), '\n');
nrn = strlen(n1) - 1;
f.getline(d1, sizeof(d1), '\n');
nrd = strlen(d1) - 1;
for(int i = 0; i <= nrn; ++i)
n[i] = n1[i] - 48;
for(int i = 0; i <= nrd; ++i)
d[i] = d1[i] - 48;
}
int main()
{
int nrd = 0, nrn = 0;
citire(nrn, nrd);
cautare(nrn, nrd);
return 0;
}