Cod sursa(job #2186236)

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