Cod sursa(job #177179)

Utilizator kolapsysPostelnicu Dan Marian kolapsys Data 12 aprilie 2008 13:42:24
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
// http://infoarena.ro/problema/next
#include <stdio.h>
#include <string.h>

FILE *fin = fopen("next.in","r"), *fout = fopen("next.out","w");
char N[1000005];  //indexu merge pana la 1000000 + 1 cel putin
int REZ[1000005];
long long D, S, nrREZ;

// functia <mod> dupa debugging pare a fi buna :)
// chiar 100%, at last my project is COMPLEEEETED
long long mod(char a[],long long b)
{
 long i;
 long long t = 0;
 for(i = 0; i <= S - 2; i++)
	{
	 t = (t * 10 + (a[i] - '0')) % b;
	}
 return t;
}

void suma(long long b)
{
 int i, t = 0;
 for (i = 0; b; i++, b /= 10, t /= 10)
	REZ[i] = (t += ((N[S - i - 2] - '0') + b % 10)) %  10;
 for (nrREZ = i; nrREZ < S - 1; nrREZ++, t/= 10)
 	{
	REZ[nrREZ] = (t += (N[S - nrREZ - 2] - '0'))% 10 ;
	if (nrREZ == S - 2 && REZ[nrREZ] == 0)
			{
			 nrREZ++;
			 REZ[nrREZ] = 1;
			}
	}

}

int main()
{
 long long r1, r2;
 fgets(N, 1000005, fin);  // citire din fisier numar mare
 S = strlen(N);
 fscanf(fin, "%lld\n", &D);
 r1 = mod(N, D);
 r2 = (D - r1) % D;
 suma(r2);
 for (long i = nrREZ - 1; i >= 0; i--)
	fprintf(fout, "%d", REZ[i]);
 fcloseall();
 return 0;
}