Cod sursa(job #1747654)

Utilizator bogdi1bogdan bancuta bogdi1 Data 25 august 2016 12:23:20
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char s[1000005];
const int Max = 1000005;
class HugeN
{
    private: int x[Max];
    public:
            HugeN()
           {
                memset(x, 0, sizeof(x));
               x[0]=1;
           }
           HugeN(int nr)
           {
             memset(x, 0, sizeof(x));
               do
               {
                   x[++x[0]]=nr%10;
                   nr=nr/10;
               }while(nr);
           }
           HugeN(char *s)
           {
               int i,aux;
               int n=strlen(s);
               x[0]=n;
               for(i=0; i<n; i++)
                x[i+1]=s[i]-'0';
                for(i=1; i<=n/2; i++){
                        aux=x[i];
                        x[i]=x[n-i+1];
                        x[n-i+1]=aux;
                }
           }
           void print()
           {
               for(int i=x[0]; i>0; i--)
                    printf("%d", x[i]);
               printf("\n");
           }
           HugeN operator+(long long k);
           long long operator%(long long k);

};
HugeN HugeN::operator+(long long k)
{
   HugeN temp;
    temp.x[0]=x[0];
    int tr=0,aux,i;
    for(i=1; i<=temp.x[0]; i++){
        aux=x[i]+k%10+tr;
        temp.x[i]=(aux%10);
        tr=aux/10;
        k/=10;
    }
    if(tr>0)
        temp.x[++temp.x[0]]=tr;
    return temp;
}
long long HugeN::operator%(long long k)
{
    int i,nr=0,aux;
    for(i=x[0]; i>0; i--){
        if(nr<k){
            nr=nr*10+x[i];
        }
        else{
            nr=nr%k;
            nr=nr*10+x[i];
        }
    }
    if(nr>k)
        nr=nr%k;
    return nr;
}
int main()
{   freopen("next.in", "r",stdin);
    freopen("next.out", "w",stdout);
    long long k,sol;
    gets(s);
    scanf("%lld", &k);
    HugeN a(s);
    sol=a%k;
    if(sol==0)
        a.print();
    else{
            sol=k-sol;
            a=a+sol;
            a.print();
    }
    return 0;
}