Cod sursa(job #1716248)

Utilizator ade_tomiEnache Adelina ade_tomi Data 12 iunie 2016 12:10:16
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<cstring>
using namespace std;
typedef vector<char> bigint;
istream &operator >>(istream &f,bigint &x)
{
    x.clear();

    string s;
    f>>s;
    for(int i=0;i<s.size();i++)
        x.push_back(s[i]-'0');
    return f;
}

ostream &operator << (ostream &g, bigint &x)
{
    for(int i=0;i<x.size();i++)
        g<<x[i];
    return g;
}
long long rest;
bigint operator /(const bigint &x, const long long &nr)
{
    rest=0;
    bigint sol;
    int ok=0;
    for(int i=0;i<x.size();i++)
    {
        rest=(long long) rest*10+x[i];
        if(rest<nr)
        {
            if(ok==1)
                sol.push_back(0);
        }
        else
        {

            sol.push_back(rest/nr);
            rest=rest-((rest/nr)*nr);
            ok=1;

        }
    }
    return sol;
}

bigint operator * (const bigint &x , const long long &nr)
{

    bigint sol;
    long long t=0;
    for(int i=x.size()-1;i>=0;i--)
    {
        long long p =(long long) x[i]*nr +t;
        sol.push_back(p%10);
        t=p/10;
    }
    while(t)
    {
        sol.insert(sol.begin(),1,t%10);
        t/=10;
    }
    return sol;

}

int main()
{
    bigint x,x2,sol;
    long long d;
    ifstream cin("next.in");
    ofstream cout("next.out");
    cin>>x;
    cin>>d;
    x2=x/d;
    //cout<<x2<<"\n";
    if(rest==0)
    {
        cout<<x;

    }
    else
    {
        int t=0;
        for(int i=x2.size()-1;i>=0;i--)
        {

            if(x2[i]!=9)
            {

                t=1;
                x2[i]++;
                break;
            }
            else
            {

                x2[i]=0;

            }
        }
        if(t==0)
            x2.insert(x2.begin(),1,1);

        sol=x2*d;
        cout<<sol;
    }
    return 0;




}