Cod sursa(job #1958168)

Utilizator 1475369147896537415369Andrei Udriste 1475369147896537415369 Data 8 aprilie 2017 05:15:11
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include<stdio.h>
#include<stdlib.h>
#include<cstring>

int N[1000020];

//------------------------------------------------------
void HugeMultiply(int A[], long long x){

long long i, t = 0;

for (i = 1; i <=A[0] || t; i++, t /= 10){
   A[i] = (t += A[i] * x) % 10;
}
A[0] = i - 1;
}
//------------------------------------------------------
void HugeDivide(int A[], long long x){

long long i, t = 0;

for (i = A[0]; i > 0; i--, t %= x){
    A[i] = (t = t * 10 + A[i]) / x;
}
for (; A[0] > 1 && !A[A[0]]; A[0]--);
}
//------------------------------------------------------
int HugeMod(int A[], int B){

int i, t = 0;
for(i = A[0]; i > 0; i--){
    t = (t * 10 + A[i]) % B;
}
return t;
}
//------------------------------------------------------
int main(){

FILE *file1, *file2;
long long D;
char stringN[1000000];
int i, k = 0;

file1 = fopen("next.in", "r");
file2 = fopen("next.out", "w");

fscanf(file1, "%s", stringN);
fscanf(file1, "%lld", &D);

N[0] = strlen(stringN);

for(i=N[0]-1; i>=0; i--){
    N[++k] = stringN[i] - 48;
}

if(HugeMod(N, D)==0){
    fprintf(file2, "%s", stringN);
    return 0;
}

HugeDivide(N, D);
N[1]++;
HugeMultiply(N, D);

for(i=N[0]; i>0; i--){
   fprintf(file2, "%d", N[i]);
}

return 0;
}