Cod sursa(job #1758541)

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

using namespace std;

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

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;
    }
}

int divide(long long unsigned x){
    int i;
    long long unsigned R = 0;
    for(i = v[0];i >= 1;i--){
        R = 10*R + v[i];
        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');
    }
    int R = divide(d);
    if(R){
        long long unsigned n = d-R;
        while(n){
            nxt[++nxt[0]] = n%10;
            n /= 10;
        }
        add();
    }
    for(i = v[0];i >= 1;i--){
        printf("%d", v[i]);
    }
    return 0;
}