Pagini recente » Cod sursa (job #1890852) | Cod sursa (job #1429307) | Cod sursa (job #848972) | Cod sursa (job #1926531) | Cod sursa (job #2023937)
#include <stdio.h>
#include <string.h>
const int max_cif = 1000005;
class huge
{
public:
char cif[max_cif];
int n;
void afis()
{
for(int i = n-1; i >= 0; i--)
printf("%d",cif[i]);
printf("\n");
}
void atrib(long long x)
{
n = 0;
while(x > 0)
{
cif[n++] = x % 10;
x /= 10;
}
}
void atribChr(char nr[], int l)
{
int i,j;
n = l;
for(i = l-1, j=0; i>=0; i--,j++)
cif[j] = nr[i] - '0';
}
void atribHuge(huge x)
{
n = x.n;
for(int i=0; i<n; i++)
cif[i] = x.cif[i];
}
void addHuge(huge x)
{
int i, t = 0;
if(n < x.n)
{
for(i=n;i<x.n;i++)
cif[i] = 0;
n = x.n;
}
else
for(i=x.n;i<n;i++)
x.cif[i] = 0;
for(i=0;i<n;i++)
{
cif[i] += x.cif[i] + t;
t = cif[i] / 10;
cif[i] %= 10;
}
if(t)
cif[n++] = t;
}
void subHuge(huge x)
{
int i, t = 0;
for(i=x.n; i<n; i++)
x.cif[i] = 0;
for(i=0; i<n; i++)
{
cif[i] -= x.cif[i] + t;
if(cif[i] < 0)
t = 1;
else
t = 0;
if(t)
cif[i] += 10;
}
while(cif[n-1] == 0)
n--;
}
void inmHuge(huge x)
{
printf("\n\n\nafisaza asta!!!!!!!\n\n");
printf("\n");
printf("intrat inm\n");
long long i,j,t = 0;
long long prod[max_cif + 1];
prod[0] = n + x.n - 1;
for(i=1; i<=prod[0] + 1; i++)
prod[i] = 0;
printf("prod = 0\n");
for(i=0; i<n; i++)
for(j=0; j<x.n; j++)
prod[i + j + 1] += cif[i] * x.cif[j];
printf("termeni adunati!\n");
for(i=1; i<=prod[0]; i++)
{
prod[i] += t;
t = prod[i] / 10;
prod[i] %= 10;
}
if(t)
prod[++prod[0]] = t;
n = prod[0];
for(i=0;i<n;i++)
cif[i] = prod[i+1];
}
long long div(long long x)
{
int i;
long long R = 0;
for(i=n-1; i>=0; i--)
{
R = 10 * R + cif[i];
cif[i] = R / x;
R %= x;
}
while(n && cif[n-1] == 0)
n--;
return R;
}
};
FILE *f1 = fopen("next.in","r");
FILE *f2 = fopen("next.out","w");
char nr[max_cif];
long long d, r;
huge n,rez,aux;
int main()
{
///citesc valorile
fscanf(f1,"%s\n%lld",nr, &d);
n.atribChr(nr, strlen(nr));
if(n.div(d) == 0) ///restul este 0
{
rez.atribHuge(n);
}
else
{
rez.atrib(d);
rez.inmHuge(n);
aux.atrib(d);
rez.addHuge(aux);
}
for(int i = rez.n-1; i>=0; i--)
fprintf(f2,"%d",rez.cif[i]);
return 0;
}