Cod sursa(job #203939)

Utilizator maria_pparcalabescu maria daniela maria_p Data 20 august 2008 22:21:46
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include<cstdio>
#include<cstring>
long y,i,n,m,a[200],t;
char s[200];
int put(long a, long b){
	if(b==0)return 1;
	//if(b==1)return a;
	if(b % 2==0)return put(a*a,b/2);
	return a*put(a,b-1);
}
int cf(long x){
	switch (x % 10){
		case 0:return 0;
		case 1:return 1;
		case 2:if(x>=4)
						if(x % 4==0)return 6;
						else return ((6+put(2,x % 4))% 10);
					else return (put(2,x)% 10);
		case 3:if(x>=4)
						if(x % 4==0)return 1;
						else return ((1+put(3,x % 4))% 10);
					else return (put(3,x)% 10);
		case 4:if(x>=2)
						if(x % 2==0)return 6;
						else return ((6+put(4,x % 2))% 10);
					else return (put(4,x)% 10);
		case 5:return 5;
		case 6:return 6;
		case 7:if(x>=4)
						if(x % 4==0)return 1;
						else return ((1+put(7,x % 4))% 10);
					else return (put(7,x)% 10);
		case 8:if(x>=4)
						if(x % 4==0)return 6;
						else return ((6+put(8,x % 4))% 10);
					else return (put(8,x)% 10);
		case 9:if(x>=2)
						if(x % 2==0)return 1;
						else return ((1+put(9,x % 2))% 10);
					else return (put(9,x)% 10);
	}
	return 0;
}
int main(){
	freopen("cifra.in","r",stdin);
	freopen("cifra.out","w",stdout);
	m=0;a[0]=5;
	for(i=3;i<=102;i++)
		a[++m]=(a[m-1]+cf(i))% 10;
	a[0]=a[m];
	scanf("%ld\n",&t);
	while(t){
		fgets(s,200,stdin);
		y=strlen(s)-2;
		if(y==0)n=s[y]-'0';
		else n=(s[y-1]-'0')*10+(s[y]-'0');;
		if(n==1)printf("1\n");
		else if(n==2)printf("5\n");
		else printf("%ld\n",a[(n-2)% m]); 
		t--;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}