Cod sursa(job #1758554)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 17 septembrie 2016 14:16:38
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <cstdio>
#include <algorithm>
#include <string.h>

using namespace std;

char s[1000005];
int v[1000005];
int nxt[1000005];

void add(){
    int i,T;
    T = 0;
    for(i = 1;i <= v[0];i++){
        v[i] += nxt[i] + T;
        T = v[i]/10;
        v[i] %= 10;
    }
    if(T){
        v[++v[0]] = T;
    }
}

long long unsigned divide(long long unsigned x){
    int i;
    long long unsigned R = 0;
    for(i = v[0];i >= 1;i--){
        R = 10*R + v[i];
        v[i] = R/x;
        R %= x;
    }
    return R;
}

void mult(long long unsigned x){
    int i;
    long long unsigned T = 0;
    for(i = 1;i <= v[0];i++){
        v[i] = v[i]*x + 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);
    scanf("%s", s+1);
    v[0] = strlen(s+1);
    int i;
    long long unsigned d;
    scanf("%llu", &d);
    for(i = 1;i <= v[0];i++){
        v[i] = (s[v[0] - i + 1] - '0');
    }
    long long unsigned R = divide(d);
    if(R){
        nxt[0] = nxt[1] = 1;
        add();
    }
    mult(d);
    for(i = v[0];i >= 1;i--){
        printf("%d", v[i]);
    }
    return 0;
}