Cod sursa(job #2298844)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 8 decembrie 2018 16:03:57
Problema Next Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
int a[1000003];
long long int rest(int A[], long long int B)
{
    long long int T = 0;
    for(long long int i = A[0]; i > 0; i--)
    {
        T = T * 10 + A[i];
        T %= B;
    }
    return T;
}
void adunare(int A[], long long int B)
{
    long long int T = B;
    for(long long int i = 1; T > 0 && i <= A[0]; i++)
    {
        T += A[i];
        A[i] = T % 10;
        T /= 10;
    }
    while(T > 0)
    {
        A[++A[0]] = T % 10;
        T /= 10;
    }
}
void scadere(int A[],long long int B)
{
    long long int T=0;
    for(long long int i=1;i<=A[0];i++)
    {
        A[i]-=B%10+T;
        if(A[i]<0)
        {
            A[i]+=10;
            T=1;
        }
        else T=0;
        B/=10;
    }
    while(A[0]>1 && A[A[0]]==0)
        A[0]--;
}
void citire(int A[])
{
    char s[1000002];;
    f >> s;
    A[0] = strlen(s);
    for(int i = 1; i <= A[0]; i++)
        A[i] = s[A[0] - i] - '0';
}
void afisare(int A[])
{
    for(int i = A[0]; i >= 1; i--)
        g<< A[i];

}

int main()
{long long int d;
    citire(a);
   f>>d;
   long long int r=rest(a,d);
   scadere(a,r);
   if(r!=0)
   adunare(a,d);
   afisare(a);
    return 0;
}