Cod sursa(job #92902)

Utilizator fireatmyselfBogdan-Alexandru Stoica fireatmyself Data 16 octombrie 2007 21:04:16
Problema Sarpe Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
#include <string.h>
#define NMAX 3000

int P[NMAX], P4[NMAX], N1[NMAX], N2[NMAX], N;
char S[NMAX];
FILE *f;

int main()
{
	int i, j;
	f=fopen("sarpe.in", "r");
	fgets(S,sizeof(S),f);
	fclose(f);
	for (N = strlen(S)-1, i = 0; i < N; i++) N1[N-1-i] = N2[N-1-i] = S[i]-'0';
	for (i = 0; i < N; i++) P4[i] = N1[i]<<2;
	N1[0]--; N2[0]-=2;
	for (i = 0; i < NMAX; i++){
		if (N1[i]<0) N1[i]+=10, N1[i+1]--;
		if (N2[i]<0) N2[i]+=10, N2[i+1]--; }
	for (i = 0; i < N; i++)
		for (j = 0; j < N; j++)
			P[i+j] = P[i+j]+N1[i]*N2[j];
	for (i = 0; i < NMAX; i++) P[i] = P[i]<<1;
	for (i = 0; i < NMAX; i++) {
		while (P[i]>9) P[i+1] += (P[i]/10), P[i] %= 10;
		if    (P4[i]>9) P4[i+1] += (P4[i]/10), P4[i] %= 10; }
	for (i = 0; i < NMAX; i++) P[i] += P4[i];
	for (i = 0; i < NMAX; i++)
		if (P[i]>9) P[i+1] += (P[i]/10), P[i] %= 10;
	for (i = NMAX-1; i >= 0 && !P[i]; i--);

	f = fopen("sarpe.out", "w");
	for (; i >= 0; i--) fprintf(f,"%d", P[i]);
	fprintf(f,"\n");
	fclose(f);
	return 0;
}