Cod sursa(job #950647)

Utilizator dpopovicDana Popovici dpopovic Data 17 mai 2013 14:29:31
Problema Cifra Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <stdio.h>
#include <string.h>
#include <time.h>

long get_count(long val) {
	long count=0, i = 5;

	while( i <= val ) {
		count += val/i;
		i *= 5;
	}
	return count;
}

long get_N(long P) {
	long min = 3*P, max = 5*P, mid, zeros;
	while ( min <= max) {
		mid = (min + max)/2;
		zeros = get_count(mid);
		printf("min=%ld   max=%ld   zeros=%ld\n", min, max, zeros );
		if(zeros==P)
			return (mid - mid%5);
		if(zeros>P) {
			max = mid-1;
		} else {
			min = mid+1;
		}
		if(min>max)
			return -1;
	}
	return -1;
}

int main(int argc, char *argv[]) {
	
	int fin[] = {0,1,4,7,6,5,6,3,6,9,0,1,6,3,6,5,6,7,4,9,0};
	
	long T, i=0, N, last = 0;
	int pen, ult, j;
	
	char c[101];
	
	//clock_t start = clock();
	
	FILE *f1 = fopen("cifra.in", "r");
	fscanf(f1, "%ld", &T);
	FILE *f2 = fopen("cifra.out", "w");
	
	//printf("T=%ld\n", T);
	int lastthree = 0;
	while(i++<T) {
		lastthree = 0;
		fscanf(f1, "%s", c);
		if(strlen(c)>2)
			lastthree = lastthree + c[strlen(c)-3]-'0';
		if(strlen(c)>1)
			lastthree = lastthree*10 + c[strlen(c)-2]-'0';
		lastthree = lastthree*10 + c[strlen(c)-1]-'0';
		//printf("c=%s    lastthree= %d\n", c, lastthree);

		pen = lastthree / 20;
		ult = lastthree % 20;
		last = pen * 4;
		j=0;
		while(j<ult) {
			//printf("last = %ld   fin[%d] = %d\n", last, j, fin[j]);
			last += fin[++j];
			//j++;
		}
		N = last%10;
		//printf("N=%ld    last  = %ld \n", N, last);
		fprintf(f2, "%ld\n", N);
	}

	fclose(f1);	
	fclose(f2);
	
	//printf ( "%f ms\n\n", ( (double)clock() - start ) * 1000 / CLOCKS_PER_SEC);
	
	return 0;
}