Cod sursa(job #2260557)

Utilizator StefantimStefan Timisescu Stefantim Data 15 octombrie 2018 09:50:37
Problema Next Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("next.in");
ofstream fout("next.out");
int a[1000005] , c[1000005] , d[1000005] ;
void citire(int a[])
{
    char s[100];
    int i;
    fin.getline(s,1000001);
    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 ;
    }
    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()
{
    int i ;
    long long b;
    citire(a);
    fin >> b ;
    next_perm(a,c,b);
    reverse(a+1,a+a[0]+1);
    adunare(a,c,d);
    for(i=d[0];i>0;i--)
        fout<<d[i];
    return 0;
}