Cod sursa(job #1687889)

Utilizator Razvan2000Razvan Jula Razvan2000 Data 13 aprilie 2016 09:41:24
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX=1000000;
char s[NMAX+1];
int a[NMAX+5];
ifstream fin("next.in");
ofstream fout("next.out");
long long rest_huge_int(int a[],long long k)
{
    long long r=0;
    int i;
    r=0;
    for(i=a[0];i>=1;i--)
    {
        r=r*10+a[i];
        r=r%k;
    }
    return r;
}
void adunh(int a[],int b[])
{
    int i,tr,aux,l;
    tr=0;
    l=max(a[0],b[0]);
    for(i=1;i<=l;i++)
    {
        aux=a[i]+b[i]+tr;
        a[i]=aux%10;
        tr=aux/10;
    }
    while(tr)
    {
        a[++a[0]]=tr%10;
        tr=tr/10;
    }
}
void printh(int x[])
{
    for(int i=x[0];i>=1;--i)
        fout<<x[i];
    fout<<"\n";
}
int main()
{
    long long d,r;
    int i,n;
    fin.getline(s,NMAX+1);
    fin>>d;
    n=strlen(s);
    a[0]=n;
    for(i=n-1;i>=0;i--)
        a[n-i]=s[i]-'0';
    r=rest_huge_int(a,d);
    if(r)
    {
        d=d-r;
        int b[20];
        memset(b,0,sizeof(b));
        do
        {
            b[++b[0]]=d%10;
            d=d/10;
        }while(d);
        adunh(a,b);
    }
    printh(a);
    return 0;
}