Cod sursa(job #2614973)

Utilizator BAlexandruBorgovan Alexandru BAlexandru Data 12 mai 2020 23:19:36
Problema Next Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <fstream>
#include <cstring>
 
using namespace std;
 
ifstream f("next.in");
ofstream g("next.out");
 
char n[1000005];
long long d;
int lgn;
 
void adunare(char a[1000005], int &lg, long long x)
{
    long long t = x;
    for (int i=1; i<=lg; i++)
    {
        t += a[i];
        a[i] = t % 10;
        t /= 10;
    }
    while (t)
    {
        lg++, a[lg] = t % 10;
        t /= 10;
    }
}
 
void impartire(char a[1000005], int &lg, long long x, long long &r)
{
    r = 0;
    for (int i=lg; i; i--)
    {
        r = r * 10 + a[i];
        a[i] = r / x;
        r = r % x;
    }
    while (a[lg] == 0 && lg > 1)
        lg--;
}
 
void inmultire(char a[1000005], int &lg, long long x)
{
    long long t = 0;
    for (int i=1; i<=lg; i++)
    {
        t += x * a[i];
        a[i] = t % 10;
        t /= 10;
    }
    while (t)
    {
        lg++, a[lg] = t % 10;
        t /= 10;
    }
}
 
int main()
{
    f >> n+1 >> d;
 
    lgn = strlen(n+1);
 
    for (int i=1; i<=lgn; i++)
        n[i] -= '0';
 
    for (int i=1, lg=lgn/2; i<=lg; i++)
        swap(n[i], n[lgn-i+1]);
 
    long long r; impartire(n, lgn, d, r);
    if (r) adunare(n, lgn, 1);
    inmultire(n, lgn, d);
 
    for (int i=lgn; i; i--)
        g << int(n[i]);
 
    return 0;
}