Mai intai trebuie sa te autentifici.

Cod sursa(job #37546)

Utilizator ZweisteinAdrian VELICU Zweistein Data 25 martie 2007 10:51:07
Problema Next Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 1.44 kb
#include <stdio.h>
#include <memory.h>
#define N_CIFS 1000000
#define D_CIFS 18

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

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

char eqal(int A[], long lA, int B[], long lB) {
	if (lA!=lB) return 0;
	else {
		for (long i=1; i<=lA; i++) if (A[i]!=B[i]) return 0;
	};
	return 1;
};

void add(int A[], long * lA, long long B) {
	long long i=1, t=0, nt;
	t=B;
//	A[1]+=B%10;
	while (t!=0) {
		if (i>*lA) A[i]=0;
		nt=(A[i]+t)/10;
		A[i]=(A[i]+t)%10;
		t=nt;
		i++;
	};
	i--;
	if (i>*lA) *lA=i;
};

int main (void) {
	FILE * fi = fopen("next.in","rt");
	FILE * fo = fopen("next.out","wt");

	int N[N_CIFS];
	long cN=0;
	int Np[N_CIFS];
	long cNp=0;

	long long d;

	memset(N,0,sizeof(N));

	char c;
	do {
		c=fgetc(fi);
		if (c!='\n') {
			N[N_CIFS-(++cN)]=c-'0';
		};
	} while (c!='\n');
	memmove(&N[1],&N[N_CIFS-cN],sizeof(int)*(cN));
//	for (int i=1; i<=5; i++) printf("%d ",N[i]);
	fscanf(fi,"%lld",&d);

	memcpy(Np,N,sizeof(N)); cNp=cN;

	div(N,&cN,d);
	mul(N,&cN,d);
	if (!eqal(N,cN,Np,cNp)) {
		add(N,&cN,d);	
	};
	for (long i=cN; i>=1; i--) printf("%d",N[i]); printf("\n");

	fclose(fi); fclose(fo);
	return 0;
};