Cod sursa(job #2186138)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 25 martie 2018 13:11:50
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int NMAX = 10000000;
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 ++)
    {
        c[i] = (a[i] - '0' + b[i] - '0' + tr) % 10 + '0';
        tr = (a[i] - '0' + 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 , 0 , 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)
        printf("%s\n" , a + 1);
    else
    {
        k = k - r;
        m = 0;
        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;
}