Pagini recente » Cod sursa (job #214124) | Cod sursa (job #337988) | Cod sursa (job #2778699) | Cod sursa (job #712463) | Cod sursa (job #2260575)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int a[1000001] , c[1000001] , d[1000005] ;
void citire(int a[])
{
char ch ;
while(scanf("%c",&ch))
{
if(ch ==' ')
continue ;
else
if(ch=='\n')
{
break ;
}
else
{
a[++a[0]]=ch-48 ;
}
}
}
void next_perm(int a[] , int c[] , long long b)
{
long long r = 0 , cop ;
int i ;
for(i=1;i<=a[0];i++)
{
r = r * 10 + (long long)(a[i]) ;
if(r>b)
r = r % b ;
}
if(r==0)
r = b ;
cop = b - r ;
do{
c[0]++;
c[c[0]]=cop % 10 ;
cop = cop / 10 ;
}while(cop>0);
}
void adunare(int x[] , int y[], int d[])
{
int r = 0 , i,k;
if(x[0]>y[0])
d[0]=x[0];
else
d[0]=y[0];
for(i=1;i<=a[0];i++)
{
k =x[i]+y[i] + r ;
d[i] = k % 10 ;
r = k / 10;
}
if(r>0)
{
d[d[0]+1]=r;
d[0]++;
}
}
int main()
{
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
int i ;
long long b;
citire(a);
scanf("%I64d",&b);
next_perm(a,c,b);
reverse(a+1,a+a[0]+1);
adunare(a,c,d);
for(i=d[0];i>0;i--)
printf("%d",d[i]);
return 0;
}