Cod sursa(job #457662)

Utilizator crushackPopescu Silviu crushack Data 20 mai 2010 20:47:43
Problema Cifra Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <string.h>
#define lung 100

int n[lung+5];
int r[lung];

int pow(int,int,int);
void gen();
void citire(int*);
int mod(int*,int);

int main()
{
	int t,i;
	freopen("cifra.in","r",stdin);
	freopen("cifra.out","w",stdout);
	gen();
	scanf("%d\n",&t);
	for (i=0;i<t;i++)
	{
		citire(n);
		printf("%d\n",r[mod(n,100)]);
	}
	return 0;
}

void citire(int *a)
{
	char s[101];int i;
	scanf("%s\n",s);
	a[0]=strlen(s);
	for (i=1;i<=a[0];i++)
		a[i]=s[a[0]-i]-48;
}

void gen()
{
	int i,s;
	r[0]=s=0;
	for (i=1;i<100;i++)
	{
		r[i]= (s+pow(i,i,10))%10;
		s=r[i];
	}
}

int pow(int x,int p,int mod)
{
	int sol,i;
	sol=1;
	for (i=0;(1<<i)<=p;++i)
	{
		if ( (1<<i)&p )
			sol= (sol*(unsigned long long)x)%mod;
		x= (x*x)%mod;
	}
	return sol;
}

int mod(int *a,int b)
{
	int r,i;
	r=0;
	for (i=a[0];i;i--)
	{
		r= (r*10+a[i])%b;
	}
	return r;
}