Cod sursa(job #944058)

Utilizator bogdan.ghercaBogdan Gherca bogdan.gherca Data 27 aprilie 2013 11:07:12
Problema Cifra Scor 90
Compilator c Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define INPUT "cifra.in"
#define OUTPUT "cifra.out"

int _2[4] = {6, -1, 4, -1};
int _3[4] = {-1, 3, -1, 7};
int _4[4] = {6, -1, 6, -1};
int _7[4] = {-1, 7, -1, 3};
int _8[4] = {6, -1, 4, -1};

/* compute last digit of x^x */
int get_last_digit(int x) {
	//printf("last_part = %d\n", last_part);
	int index = x % 4;
	int last_digit = x % 10;
	if (last_digit == 2)
		return _2[index];
	else if (last_digit ==3)
		return _3[index];
	else if (last_digit == 4)
		return _4[index];
	else if (last_digit == 7)
		return _7[index];
	else if (last_digit == 8)
		return _8[index];

	return last_digit;
}

int tail_2(char *number) {
	int len = strlen(number);
	int last_part, last_digit;
	if (len == 1) {
			last_part = number[len - 1] - '0';
			last_digit = last_part;
		}
		else {
			last_digit = number[len - 1] - '0';
			last_part = (number[len - 2] - '0') * 10 + last_digit;
		}
	return last_part;
}

int main() {
	FILE *in, *out;
	int t, i, j;
	char number[100], **numbers;

	in = fopen(INPUT, "r");
	out = fopen(OUTPUT, "w");
	fscanf (in, "%d", &t);

	numbers = malloc(t * sizeof(char*));
	for (i=0; i<t; i++) {
		fscanf (in, "%s", number);
		numbers[i] = malloc((strlen(number) + 1) * sizeof(char));
		strcpy (numbers[i], number);
	}

	for (i=0; i<t; i++) {
		//printf("%s\n", numbers[i]);
		int nrb = tail_2(numbers[i]);
		//printf("%d\n", nrb);
		int sum = 0;
		for (j=1; j<=nrb; j++) {
			sum += get_last_digit(j);
			sum = sum % 10;
		}
		//printf("%d\n", sum);
		fprintf(out, "%d\n", sum);
	}

	fclose(in);
	fclose(out);
	return 0;
}