Cod sursa(job #526741)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 29 ianuarie 2011 12:36:34
Problema Cifra Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.78 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
	char caractere[101];
	int cifre[101];
	int nr_cifre;
}
numar;

int valid(numar n)
{
	if(n.nr_cifre>1)
	{
		return 1;
	}
	if(n.cifre[0]==0)
	{
		return 0;
	}
	return 1;
}

numar scadere(numar n)
{
	int i;
	n.cifre[n.nr_cifre-1]--;
	for(i=n.nr_cifre-1;i>=0;i--)
	{
		if(n.cifre[i]<0)
		{
			n.cifre[i]=9;
			n.cifre[i-1]--;
		}
		else
		{
			break;
		}
	}
	if(n.nr_cifre>1)
	{
		if(n.cifre[0]==0)
		{
			for(i=0;i<n.nr_cifre;i++)
			{
				n.cifre[i]=n.cifre[i+1];
			}
			n.nr_cifre--;
		}
	}
	return n;
}

int putere(int n, int p)
{
	int i, uc;
	i=1;
	uc=n;
	if(p==0)
	{
		for(i=1;i<4;i++)
		{
			uc=(uc*n)%10;
		}
	}
	else
	{
		for(i=1;i<p;i++)
		{
			uc=(uc*n)%10;
		}
	}
	return uc;
}

int main()
{
	FILE *fin, *fout;
	fin=fopen("date.in", "r");
	fout=fopen("date.out", "w");
	int k, uc, uc_final, d;
	numar n;
	fscanf(fin, "%d", &k);
	while(k>0)
	{
		k--;
		uc_final=0;
		fscanf(fin, "%s", &n.caractere);
		n.nr_cifre=0;
		while(((int)n.caractere[n.nr_cifre]>=(int)'0')&&((int)n.caractere[n.nr_cifre]<=(int)'9'))
		{
			n.cifre[n.nr_cifre]=(int)n.caractere[n.nr_cifre]-(int)'0';
			n.nr_cifre++;
		}
		while(valid(n)==1)
		{
			switch(n.cifre[n.nr_cifre-1])
			{
				case 0: uc=0;
						break;
				case 1: uc=1;
						break;
				case 5: uc=5;
						break;
				case 6: uc=6;
						break;
				default:if(n.nr_cifre>1)
						{
							d=n.cifre[n.nr_cifre-1]+10*n.cifre[n.nr_cifre-2];
						}
						else
						{
							d=n.cifre[n.nr_cifre-1];
						}
						uc=putere(n.cifre[n.nr_cifre-1], d%4);
						break;
			}
			uc_final=(uc_final+uc)%10;
			n=scadere(n);
		}
		fprintf(fout, "%d\n", uc_final);
	}
	return 0;
}