Pagini recente » Profil M@2Te4i | avram_vara_1 | Monitorul de evaluare | Rating Lincan Andrei (andrus) | Cod sursa (job #992214)
Cod sursa(job #992214)
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;
ifstream fin ("next.in");
ofstream fout("next.out");
#define baza 10
#define MAX 1000010
long long int i,s,m,a1,t,j,l,d,k,ci,kl;
char n[MAX];
unsigned int a[MAX],b[20];
void inm(unsigned int* al, unsigned int* bl, unsigned int* ml)
{
ml[0]=al[0]+bl[0]-1;
for(i=1;i<=al[0];i++)
{
for(j=1;j<=bl[0];j++)
{
ml[i-1+j]+=al[i]*bl[j];
}
}
for(i=1;i<=ml[0];i++)
{
if(ml[i]>9)
{
ml[i+1]+=ml[i]/10;
ml[i]%=10;
}
}
if(ml[i])
ml[0]++;
}
void transforma(long long int sos, unsigned int* al)
{
long long int k=0;
while(sos)
{
al[++k]=sos%baza;
sos/=baza;
}
al[0]=k;
}
void fshow(unsigned int *al)
{
for(i=al[0];i>=1;i--)
{
fout<<al[i];
}
}
void show(unsigned int *al)
{
for(i=al[0];i>=1;i--)
{
cout<<al[i];
}
}
long long int mod(unsigned int* al,long long int d)
{
long long int p=0;
for(i=al[0];i>=1;i--)
{
long long int xi=al[i]+p;
p=xi%d;
p*=baza;
}
p/=baza;
return p;
}
long long modulo( unsigned int* A,long long int B)
{
long long i, T = 0;
for ( i = A[0]; i; --i )
T = ( T * baza + A[i] ) % B;
return T;
}
void add(unsigned int* cl, unsigned int* dl)
{
for(kl=1;kl<=cl[0];kl++)
{
cl[kl]+=dl[kl];
}
for(kl=1;kl<=cl[0];kl++)
{
cl[kl+1]+=(cl[kl]/baza);
cl[kl]%=baza;
}
if(cl[cl[0]+1])
cl[0]++;
}
int main()
{
fin>>n;
a[0]=strlen(n);
for(i=1;i<=a[0];i++)
{
a[i]=n[a[0]-i]-'0';
}
fin>>d;
long long int p=modulo(a,d);
if(!p)
fshow(a);
else
{
p=d-p;
transforma(p,b);
if(a[0]>b[0])
{
add(a,b);
fshow(a);
}
else
{
add(b,a);
fshow(b);
}
}
return 0;
}