Cod sursa(job #1887305)

Utilizator BanhidiBanhidi Zoltan Banhidi Data 21 februarie 2017 15:14:57
Problema Cifra Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 100

int lastDigitOfPower(int base, int power) {
	int aux = base % 10;
	int p = 1;
	for (int i = 0; i < power; i++)
		p = (p * aux) % 10;
	return p;
}

char* constructLookUpTable(int size) {
	char *lut = (char*) malloc(size * sizeof(char));
	lut[0] = 0;
	for(int i = 1; i < size; i++) {
		int tmp = lastDigitOfPower(i, i);
		lut[i] = (lut[i-1] + tmp) % 10;
	}
	return lut;
}

int main() {	
	char *lut = constructLookUpTable(SIZE);
	char *inputFileName = "cifra.in";
	char *outputFileName = "cifra.out";
	char tmp[110];
	FILE *in, *out;
	int t;

	in = fopen(inputFileName, "r");
	if (in == NULL) {
		printf("Can't open input file with name \"%s\".", inputFileName);
		return -1;
	}

	out = fopen(outputFileName, "w");
	if (out == NULL) {
		printf("Can't create output file with name \"%s\".", outputFileName);
		return -1;
	}

	fscanf(in, "%d", &t);
	for(int i = 0; i < t; i++) {
		fscanf(in, "%s", tmp);
		//printf("%s\n", tmp);
		int length = strlen(tmp);
		if (length == 1)
			fprintf(out, "%d", lut[tmp[0] - '0']);
		else {
			int beforeLast = tmp[length - 2] - '0';
			int last = tmp[length - 1] - '0';
			fprintf(out, "%d\n", lut[beforeLast*10 + last]);
		}
	}

	fclose(in);
	fclose(out);

	free(lut);
	return 0;
}