Cod sursa(job #1909398)

Utilizator ianiIani Biro iani Data 7 martie 2017 12:36:15
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <string.h>
#define Nmax 1000000
typedef int Huge[Nmax+1];

using namespace std;

Huge n;
long long int d;

void Mult(Huge H, unsigned long long int X)
{
    int i;
    unsigned long long int T=0;
    /* H <- H*X */
    for (i=1; i<=H[0]; i++)
    {
        H[i]=H[i]*X+T;
        T=H[i]/10;
        H[i]=H[i]%10;
    }
    while (T) /* Cat timp exista transport */
    {
        H[++H[0]]=T%10;
        T/=10;
    }
}

unsigned long long int Divide(Huge A, unsigned long long int X)
{
    int i;
    unsigned long long int 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;
}

int main()
{
    ifstream fin ("next.in");
    ofstream fout ("next.out");
    char cit[1000001];
    fin.getline(cit,1000001);
    n[0]=strlen(cit);
    for (int i=n[0]-1; i>=0; i--)
        n[n[0]-i]=cit[i]-'0';
    fin>>d;
    if (Divide(n,d)==0)
        fout<<cit;
    else
    {
        while (n[0] && !n[n[0]])
            n[0]--;
        int T=0;
        n[1]+=1;
        for (int i=1; i<=n[0]; i++)
        {
            n[i]+=T;
            T=n[i]/10;
            n[i]%=10;
        }
        if (T) n[++n[0]]=T;
        Mult(n,d);
        for (int i=n[0]; i>=1; i--)
            fout<<n[i];
    }
    return 0;
}