Cod sursa(job #776025)

Utilizator visanrVisan Radu visanr Data 9 august 2012 17:34:25
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;


int v[1100000],lg;
long long D;
char s[1000001];


long long imp()
{
     long long r = 0;
     int i;
     for(i = v[0]; i; i--)
     {
           r = 10 * r + v[i];
           v[i] = r / D;
           r %= D;
     }
     while(!v[v[0]] && v[0] > 1) -- v[0];
     return r;
}

void ad()
{
     int poz = 1, r = 0;
     v[1] ++;
     if(v[1] == 10)
     {
              r = 1;
              while(poz <= v[0] && r == 1)
              {
                     r = v[poz] / 10;
                     v[poz] %= 10;
                     poz ++;
              }
              if(r == 1) v[++v[0]] = 1;
     }
}

void inm()
{
     long long t = 0;
     int i;
     for(i = 1; i <= v[0]; i++)
     {
           v[i] = v[i] * D + t;
           t = v[i] / 10;
           v[i] %= 10;
     }
     while(t) 
     {
              v[++v[0]] = t % 10;
              t /= 10;
     }
}

int main()
{
    freopen("next.in", "r", stdin);
    freopen("next.out", "w", stdout);
    int i, poz = 1;
    fgets(s, 1000001, stdin);
    lg = strlen(s) - 1;
    v[0] = lg;
    for(i = lg - 1; i >= 0; i--) v[poz ++] = s[i] - '0';
    scanf("%lld", &D);
    long long rez = imp();
    if(rez)
    {
           ad(); inm();
    }
    for(i = v[0]; i; i--) printf("%i", v[i]);
    scanf("%i", &i);
    return 0;
}