Pagini recente » Istoria paginii runda/oji_10_2024/clasament | Rating Robert Petrescu (Robert9000) | Cod sursa (job #341295) | Rating Oprea Mihai-Alexandru (opreamihay) | Cod sursa (job #912552)
Cod sursa(job #912552)
#include<cstdio>
#include<cstring>
#include<algorithm>
#define NMAX 1000010
#define ULL unsigned long long
using namespace std;
FILE *fin,*fout;
short b[20],v[NMAX];
ULL d,m;
void read()
{
fin=fopen("next.in","r");
char x[NMAX];
fscanf(fin,"%s %lld",&x,&d);
v[0]=strlen(x);
for(int i=1;i<=v[0];i++)
v[i]=(short)(x[i-1]-'0');
fclose(fin);
}
void transform(ULL aux)
{
int i;
for(i=1;aux;i++,aux/=10)
b[i]=aux%10;
b[0]=i-1;
}
void mod()
{
for(int i=1;i<=v[0];i++)
{
m=m*10+v[i];
if(m<d)
continue;
m%=d;
}
}
void add()
{
int i;
for(i=1;i<=v[0] || i<=b[0] || v[i];i++)
{
if(i<=b[0])
v[i]+=b[i];
if(v[i]>9)
{
v[i+1]++;
v[i]%=10;
}
}
v[0]=i-1;
}
void sub()
{
int i;
for(i=1;i<=v[0] || v[i];i++)
{
if(i<=b[0])
v[i]-=b[i];
if(v[i]<0)
{
v[i]+=10;
v[i+1]--;
}
}
for(i=v[0];!v[i];i--);
v[0]=i;
}
void solve()
{
transform(d);
mod();
reverse(v+1,v+v[0]+1);
add();
transform(m);
sub();
}
void print()
{
fout=fopen("next.out","w");
for(int i=v[0];i;i--)
fprintf(fout,"%hi",v[i]);
}
int main()
{
read();
solve();
print();
return 0;
}