Pagini recente » Cod sursa (job #1980954) | Cod sursa (job #3130123) | Cod sursa (job #1783441) | Cod sursa (job #1405467) | Cod sursa (job #1783443)
#include <bits/stdc++.h>
#define NMax 1000000
typedef unsigned long long Huge[NMax+3];
Huge A;
using namespace std;
//ifstream fin("next.in");
ofstream fout("next.out");
unsigned long long D, R;
int Sgn(Huge H1, Huge H2) {
// Elimina zero-urile semnificative, daca exista.
while (H1[0] && !H1[H1[0]]) H1[0]--;
while (H2[0] && !H2[H2[0]]) H2[0]--;
if (H1[0] < H2[0]) {
return -1;
} else if (H1[0] > H2[0]) {
return +1;
}
for (int i = H1[0]; i > 0; --i) {
if (H1[i] < H2[i]) {
return -1;
} else if (H1[i] > H2[i]) {
return +1;
}
}
return 0;
}
void Subtract(Huge A, Huge B)
/* A <- A-B */
{ int i, T=0;
for (i=B[0]+1;i<=A[0];) B[i++]=0;
for (i=1;i<=A[0];i++)
A[i]+= (T=(A[i]-=B[i]+T)<0) ? 10 : 0;
/* Adica A[i]=A[i]-(B[i]+T);
if (A[i]<0) T=1; else T=0;
if (T) A[i]+=10; */
while (!A[A[0]] && A[0])
A[0]--;
}
void Mult(Huge H, unsigned long long X)
/* H <- H*X */
{ int i;
unsigned long long T=0;
for (i=1;i<=H[0];i++)
{ H[i]=H[i]*X+T;
T=H[i]/10;
H[i]=H[i]%10;
}
while (T) /* Cat timp exista transport */
{ H[++H[0]]=T%10;
T/=10;
}
}
void Add(Huge C, int unu)
{
C[1] ++;
unsigned long long T = C[1] / 10;
for(int i = 2; i <= C[0]; i ++)
{
C[i] = C[i] + T;
T = C[i] / 10;
C[i] %= 10;
}
}
unsigned long long Divide(Huge A, unsigned long long X)
/* A <- A/X si intoarce A%X */
{ int i;
unsigned long long R=0;
for (i=A[0];i;i--)
{
R=10*R+A[i];
A[i]= R / X;
R%=X;
}
while (!A[A[0]] && A[0]>1) A[0]--;
return R;
}
using namespace std;
int main()
{
freopen("next.in", "r", stdin);
char c = getc(stdin);
while(isdigit(c))
{
A[ ++A[0] ] = c - '0';
c = getc(stdin);
}
for (int i=1;i<=A[0]/2;i++)
swap(A[i], A[ A[0] - i + 1 ]);
fscanf(stdin, "%d", &D);
R = Divide(A, D);
if(R == 0)
{
for(int i = A[0]; i >= 1; i --)
{
fout << A[i];
}
return 0;
}
Add(A, 1);
Mult(A, D);
for(int i = A[0]; i >= 1; i --)
{
fout << A[i];
}
return 0;
}