Cod sursa(job #2108902)

Utilizator lixiLixandru Andrei lixi Data 18 ianuarie 2018 22:09:36
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
char s[1000003];
int a[1000003], t[1000003];
long long d;
unsigned long Divide(int A[], unsigned long X)
/* A <- A/X si intoarce A%X */
{
    int i;
    unsigned long R = 0;
    for(i = A[0]; i; i--)
    {
        A[i] = (R = 10 * R + A[i]) / X;
        R %= X;
    }
    while(!A[A[0]] && A[0] > 1) A[0]--;
    return R;
}
void Add(int A[], int B[])
/* A <- A+B */
{
    int i, T = 0;
    if(B[0] > A[0])
    {
        for(i = A[0] + 1; i <= B[0];) A[i++] = 0;
        A[0] = B[0];
    }
    else for(i = B[0] + 1; i <= A[0];) B[i++] = 0;
    for(i = 1; i <= A[0]; i++)
    {
        A[i] += B[i] + T;
        T = A[i] / 10;
        A[i] %= 10;
    }
    if(T) A[++A[0]] = T;
}

int main()
{
    int cif = 0;
    f.getline(s, 1000003);
    f >> d;
    a[0] = strlen(s);
    for(int i = strlen(s); i >= 1; i--)
        a[i] = s[strlen(s) - i] - 48;
    long long r = Divide(a, d);
    r = d - r;
    for(int i = 1; r; i++)
    {
        cif++;
        t[i] = r % 10;
        r /= 10;
    }
    t[0] = cif;
    for(int i = strlen(s); i >= 1; i--)
        a[i] = s[strlen(s) - i] - 48;
    a[0] = strlen(s);
    Add(a, t);
    for(int i = a[0]; i >= 1; i--)
        g << a[i];
    return 0;
}