Cod sursa(job #744606)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 9 mai 2012 10:55:40
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>

using namespace std;


ifstream in("next.in");
ofstream out("next.out");

char a[1111111];
int b[1111111];
int lung,lung2;
long long d;


void imparte()
{
    int i;
    long long t=0;
    lung2=-1;
    for(i=lung;i;--i)
    {
        t*=10;
        t+=a[i];
        b[i]=t/d;
        if(b[i]!=0 && lung2==-1)
        {
            lung2=i;
        }
        t%=d;
    }
    if(t==0)
    {
        for(i=lung;i;--i)
        {
            out<<(int)a[i];
        }
        exit(0);
    }
}

void plusplus()
{
    int i;
    b[1]++;
    for(i=1;i<=lung2;++i)
    {
        b[i+1]+=b[i]/10;
        b[i]%=10;
    }
    if(b[lung2+1]!=0)
    {
        lung2++;
    }
}

void inmulteste()
{
    int i;
    long long t=0,x;
    for(i=1;i<=lung2;++i)
    {
        x=b[i]*d+t;
        t=x/10;
        b[i]=x%10;
    }
    while(t)
    {
        lung2++;
        b[lung2]=t%10;
        t/=10;
    }
}



int main()
{
    int l,i,aux;
    in.getline(a+1,1111111);
    in>>d;
    lung=strlen(a+1);
    l=lung/2;
    for(i=1;i<=lung;++i)
    {
        a[i]-='0';
    }
    for(i=1;i<=l;++i)
    {
        aux=a[i];
        a[i]=a[lung-i+1];
        a[lung-i+1]=aux;
    }
    imparte();
    plusplus();
    inmulteste();
    for(i=lung2;i;--i)
    {
        out<<(int)b[i];
    }
    return 0;
}