Pagini recente » Cod sursa (job #1660829) | Cod sursa (job #293496) | Cod sursa (job #293517) | Cod sursa (job #373058) | Cod sursa (job #2260527)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int a[1000000] , c[1000000] , d[1000000] ;
void citire(int a[])
{
char s[100];
int i;
gets(s);
a[0] = strlen(s);
for(i=0;i<a[0];i++)
{
a[i+1]=(int)(s[i]-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 ;
}
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("%lld",&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;
}