Cod sursa(job #68585)

Utilizator c_sebiSebastian Crisan c_sebi Data 28 iunie 2007 15:29:53
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#include <string.h>

long long d;

int n[1000500], ad[200];

void citire(){
	int i;
	char s[1000500];
	FILE *f=fopen ("next.in", "r");
	fscanf (f, "%s\n", &s);
	fscanf (f, "%lld", &d);
	fclose(f);
	n[0]=strlen(s);
	for (i=n[0]; i>=1; --i) n[n[0]-i+1]=s[i-1]-'0';
}

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

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


int main(){
	int i;
	citire();
	long long x = (d - mod(n, d) ) % d;
	if (!x) ad[0]=1;
	while (x) ad[++ad[0]]=x%10, x/=10;
	add(n, ad);
	FILE *g=fopen ("next.out", "w");
	for (i=n[0]; i>0; --i)
		fprintf(g, "%d", n[i]);
	fprintf (g, "\n");
	fclose(g);
	return 0;
}