Pagini recente » Cod sursa (job #625171) | Cod sursa (job #279763) | Cod sursa (job #1343715) | Cod sursa (job #840281) | Cod sursa (job #733038)
Cod sursa(job #733038)
#include <fstream>
using namespace std;
ifstream F("next.in");
ofstream G("next.out");
#define Lint unsigned long long
#define Dmax 1000100
#define nat(chr) ( int(chr)-int('0') )
#define OK(chr) ( nat(chr)>-1 && nat(chr)<10 )
#define swp(a,b) ( a ^=b ^=a ^=b )
typedef int Huge[Dmax];
typedef char String[Dmax];
Huge N;
Lint D,Dim;
String C;
Lint Modulo(Huge A,Lint N,Lint D)
{
Lint Nbr=0;
for (int i=1;i<=N;++i)
{
Nbr= Nbr * 10 + A[i] ;
while ( Nbr>=D ) Nbr-=D;
}
return Nbr;
}
void Read()
{
F.getline(C,Dmax,'\n');
F>>D;
for (int i=0; OK(C[i]) ;++i)
N[++Dim]=nat(C[i]);
}
void Turn()
{
for (int i=1;i<=Dim/2;++i)
swp(N[i],N[Dim-i+1]);
}
void Add(Huge A, Lint& N, Lint D)
{
A[1]+=D;
for (int i=1;i<N;++i)
if ( A[i]>9 )
A[i+1]+=A[i]/10,A[i]%=10;
while ( A[N]>9 )
A[N+1]+=A[N]/10,A[N++]%=10;
}
void Write()
{
for (int i=1;i<=Dim;++i)
G<<N[i];
G<<'\n';
}
int main()
{
Read();
Lint Dv=Modulo(N,Dim,D);
D= ( Dv==0 ) ? 0 : (D-Dv) %D;
Turn();
Add(N,Dim,D);
Turn();
Write();
F.close();
G.close();
return 0;
}