Pagini recente » Cod sursa (job #1687847) | Cod sursa (job #567883) | Cod sursa (job #2224159) | Cod sursa (job #1735485) | Cod sursa (job #2622768)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("next.in");
ofstream fout("next.out");
typedef int NrMare[10001];
NrMare N;
char s[10001];
void AtribCuNrMare(NrMare Dest, NrMare Sursa)
{
int i;
for(i=0;i<=Sursa[0];i++)
Dest[i]=Sursa[i];
}
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;
long long rest,div;
NrMare y;
fin.getline(s,10001);
fin>>div;
//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;
y[0]=0; ///pastram in y diferenta dintre divizor si rest
while(diferenta!=0)
{
y[++y[0]]=diferenta%10;
diferenta=diferenta/10;
}
Adunare(N,y);
///se afiseaza urmatorul nr divizibil cu div(D)
for(i=1; i<=N[0]; ++i)
fout<<N[i];
return 0;
}