Cod sursa(job #992232)

Utilizator sebinechitasebi nechita sebinechita Data 1 septembrie 2013 15:14:31
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <cmath>
using namespace std;

ifstream fin ("next.in");
ofstream fout("next.out");
#define baza 10
#define MAX 1000010
long long int i,k,kl,d;


unsigned int a[MAX];


void fshow(unsigned int *al)
{
    for(i=al[0];i>=1;i--)
    {
        fout<<al[i];
    }
}

void show(unsigned int *al)
{
    for(i=al[0];i>=1;i--)
    {
        cout<<al[i];
    }
}

long long int mod(unsigned int* al,long long int d)
{
    long long int p=0;
    for(i=al[0];i>=1;i--)
    {


        long long int xi=al[i]+p;
        p=xi%d;
p*=baza;
    }
    p/=baza;
    return p;
}

void add(unsigned int* cl, long long int dx)
{
    i=0;
    while(dx)
    {
        a[++i]+=dx%10;
        dx/=10;
    }

    for(kl=1;kl<=cl[0];kl++)
    {
        cl[kl+1]+=(cl[kl]/baza);

        cl[kl]%=baza;

    }

    while(cl[cl[0]+1])
        cl[0]++;


}
void citire()
{
    char n;
    fin.get(n);
    i=0;
    while(n!='\n'){
        a[++i]=n-'0';
        fin.get(n);
    }
    a[0]=i;
    for(i=1;i<=a[0]/2;i++)
    {
        swap(a[i],a[a[0]+1-i]);
    }


    fin>>d;
}

int main()
{

    citire();

    long long int p=mod(a,d);

    if(p)
    {

        add(a,d-p);

    }
        fshow(a);
    return 0;
}