Pagini recente » Cod sursa (job #1093326) | Cod sursa (job #1326689) | Cod sursa (job #877074) | Cod sursa (job #2221919) | Cod sursa (job #2182802)
#include <cstdio>
#include <cstring>
using namespace std;
const int NMAX = 1000005;
char s[NMAX];
int a[NMAX];
int b[NMAX];
inline long long int modulo(int a[NMAX],long long int k)
{
long long int r;
long long int aux=0;
for(int i = a[0] ; i >= 1 ; i--)
aux = (aux * 10 + a[i])%k;
return k-aux;
}
inline void getHuge(int a[NMAX],long long int nr)
{
while(nr)
{
a[++a[0]] = nr % 10;
nr /= 10;
}
}
inline void aduna(int a[NMAX],int b[NMAX])
{
int i,t=0;
if (b[0] > a[0])
{
for (i=a[0]+1;i<=b[0];i++)
a[i]=0;
a[0]=b[0];
}
else
for (i= b[0] + 1 ; i <= a[0] ; i++)
b[i]=0;
for (i=1;i<=a[0];i++)
{
a[i] += b[i] + t;
t = a[i] / 10;
a[i] %= 10;
}
if (t) a[++a[0]]=t;
}
int main()
{
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
long long int nr;
long long int r;
gets(s);
scanf("%lld",&nr);
for(int i = strlen(s)-1 ; i >= 0 ; i--)
a[++a[0]] = (s[i]-'0');
r = modulo(a,nr);
getHuge(b,r);
aduna(a,b);
for(int i = a[0] ; i >= 1 ; i--)
printf("%d",a[i]);
return 0;
}