Pagini recente » Cod sursa (job #3162076) | Cod sursa (job #1103731) | Cod sursa (job #763763) | Cod sursa (job #470091) | Cod sursa (job #238514)
Cod sursa(job #238514)
#include <stdio.h>
#define DIM 1000005
#define ll long long
int a[DIM],b[DIM];
int n;
ll r,d;
int maxim (int a,int b)
{
if (a>b)
return a;
else
return b;
}
ll rest (int a[DIM],ll val)
{
int i;
ll t=0;
for (i=1; i<=a[0]; ++i)
{
t=t*10+a[i];
t%=val;
}
return t;
}
void clean (int a[DIM])
{
int i;
for (i=1; i<=a[0]; ++i)
a[i]=0;
a[0]=0;
}
void aduna (int a[DIM],ll val)
{
int i,max,t=0;
b[0]=a[0];
for (i=1; i<=a[0]; ++i)
b[b[0]-i+1]=a[i];
clean (a);
while (val)
{
a[++a[0]]=val%10;
val/=10;
}
max=maxim (a[0],b[0]);
a[0]=max;
for (i=1; i<=max; ++i)
{
a[i]+=b[i]+t;
t=a[i]/10;
a[i]%=10;
}
if (t)
a[++a[0]]=1;
}
void print ()
{
int i;
for (i=1; i<=a[0]; ++i)
printf ("%d",a[a[0]-i+1]);
}
int main ()
{
freopen ("next.in","r",stdin);
freopen ("next.out","w",stdout);
int i;
ll x=0;
char ch;
while (scanf ("%c",&ch))
{
if(ch=='\n')
break;
a[++n]=ch-'0';
}
a[0]=n;
if (n<17)
{
i=1;
while (i<=n)
{
x*=10;
x+=a[i++];
}
}
scanf ("%lld",&d);
if (x<d)
{
printf ("%lld",d);
return 0;
}
r=rest (a,d);
aduna (a,d-r);
print ();
return 0;
}