Cod sursa(job #204375)

Utilizator vlad.maneaVlad Manea vlad.manea Data 23 august 2008 11:20:13
Problema Cifra Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <stdio.h>
#include <math.h>

unsigned long long T, N, ans, x;

unsigned long long cate[32];

int main()
{
	unsigned long long i;

	freopen("cifra.in", "r", stdin);
	freopen("cifra.out", "w", stdout);

	for (N = 1; N <= 20; ++N)
	{
		for (i = 1, ans = 0; i <= N; ++i)
		{
			x = i % 10;

			if (x == 1)
				ans += 1;
			else if (x == 2)
			{
				if (i % 4 == 1)
					ans += 2;
				else if (i % 4 == 2)
					ans += 4;
				else if (i % 4 == 3)
					ans += 8;
				else
					ans += 6;
			}
			else if (x == 3)
			{
				if (i % 4 == 1)
					ans += 3;
				else if (i % 4 == 2)
					ans += 9;
				else if (i % 4 == 3)
					ans += 7;
				else
					ans += 1;
			}
			else if (x == 4)
			{
				if (i % 2 == 1)
					ans += 4;
				else
					ans += 6;
			}
			else if (x == 5)
				ans += 5;
			else if (x == 6)
				ans += 6;
			else if (x == 7)
			{
				if (i % 4 == 1)
					ans += 7;
				else if (i % 4 == 2)
					ans += 9;
				else if (i % 4 == 3)
					ans += 3;
				else
					ans += 1;
			}
			else if (x == 8)
			{
				if (i % 4 == 1)
					ans += 8;
				else if (i % 4 == 2)
					ans += 4;
				else if (i % 4 == 3)
					ans += 2;
				else
					ans += 6;
			}
			else if (x == 9)
			{
				if (i % 2 == 1)
					ans += 9;
				else
					ans += 1;
			}

			ans %= 10;
		}

		cate[N] = ans;
	}

	scanf("%llu", &T);

	for (; T--; )
	{
		scanf("%llu", &N);

		ans = (N / 20 * cate[20] + cate[N % 20]) % 10;

		printf("%llu\n", ans);
	}

	return 0;
}