Pagini recente » Cod sursa (job #1500496) | Cod sursa (job #517242) | Cod sursa (job #743216) | Cod sursa (job #479272) | Cod sursa (job #2622782)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("next.in");
ofstream fout("next.out");
typedef int NrMare[100001];
NrMare N;
char s[100001];
void AtribCuNrMare(NrMare Dest, NrMare Sursa)
{
int i;
for(i=0; i<=Sursa[0]; i++)
Dest[i]=Sursa[i];
}
unsigned long long Divide(NrMare x, int n)
//x = x /n, returneaza x%n
{
int i,r=0;
for(i=x[0]; i>0; i--)
{
r=10*r+x[i];
x[i]=r/n;
r%=n;
}
while(x[x[0]]==0 && x[0]>1)
x[0]--;
return r;
}
void Adunare(NrMare X, NrMare Y)
/* X <- X+Y */
{
int i,T=0;
if (Y[0]>X[0])
{
for (i=X[0]+1; i<=Y[0];)
X[i++]=0;
X[0]=Y[0];
}
else
for (i=Y[0]+1; i<=X[0];)
Y[i++]=0;
for (i=1; i<=X[0]; i++)
{
X[i]+=Y[i]+T;
T=X[i]/10;
X[i]%=10;
}
if (T!=0)
X[++X[0]]=T;
}
int main()
{
int lgsir,i,mij;
unsigned long long rest,div;
NrMare y;
fin.getline(s,10001);
fin>>div;
fin.close();
//cout<<div;
lgsir=strlen(s);
///se transforma sirul de caractere in numarul mare N
N[0]=lgsir;
for(i=1; i<=lgsir; ++i)
N[i]=int(s[i-1]-'0');
mij=N[0]/2;
for(i=1; i<=mij; ++i )
swap(N[i],N[N[0]+1-i]);
AtribCuNrMare(y,N); ///copiez numarul mare N in numarul mare y
rest=Divide(y,div); ///restul(R) impartirii la divizor (D)
long long diferenta=(div-rest)%div;
y[0]=0; ///pastram in y diferenta dintre divizor si rest
if(diferenta!=0)
{
while(diferenta!=0)
{
y[++y[0]]=diferenta%10;
diferenta=diferenta/10;
}
Adunare(N,y);
}
///se afiseaza urmatorul nr divizibil cu div(D)
for(i=N[0]; i>=1; --i)
fout<<N[i];
fout<<"\n";
fout.close();
return 0;
}