Cod sursa(job #2185969)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 25 martie 2018 11:10:12
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int NMAX = 10000000;
int a[NMAX + 5] , b[NMAX + 5] , c[NMAX + 5] , d[25];
char s[NMAX + 5];
void huge_sum(int a[] , int b[] , int c[])
{
    int i , tr;
    memset(c , 0 , sizeof(c));
    c[0] = max(a[0] , b[0]);
    tr = 0;
    for(i = 1 ; i <= c[0] ; i ++)
    {
        c[i] = (a[i] + b[i] + tr) % 10;
        tr = (a[i] + b[i] + tr) / 10;
    }
    if(tr != 0)
        c[++ c[0]] = tr;
}
long long huge_imp(int a[] , int c[] , long long &r , long long k)
{
    memset(c , 0 , sizeof(c));
    int i;
    r = 0;
    for(i = a[0] ; i >= 1 ; i --)
    {
        r = r * 10 + a[i];
        c[++ c[0]] = r / k;
        r = r % k;
    }
    reverse(c + 1 , c + c[0] + 1);
    while(c[c[0]] == 0 && c[0] > 1)
        c[0] --;
    return r;
}
int main()
{
    freopen("next.in" , "r" , stdin);
    freopen("next.out" , "w" , stdout);
    int d , i;
    long long r , k;
    gets(s);
    scanf("%lld" , &k);
    a[0] = strlen(s);
    for(i = 0 ; i < a[0] ; i ++)
        a[a[0] - i] = s[i] - '0';
    r = huge_imp(a , b , r , k);
    if(r == 0)
        printf("%s\n" , s);
    else
    {
        k = k - r;
        b[0] = 0;
        while(k > 0)
        {
            b[++ b[0]] = k % 10;
            k = k / 10;
        }
        huge_sum(a , b , c);
        for(i = c[0] ; i >= 1 ; i --)
            printf("%d" , c[i]);
    }
    return 0;
}