Cod sursa(job #870930)

Utilizator Noradllrares stoica Noradll Data 4 februarie 2013 09:15:45
Problema Cifra Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.77 kb
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
int main()
{
	FILE* f = fopen("cifra.in","r");
	ofstream g("cifra.out");
	int t;
	fscanf(f,"%d",&t);
	char numar[200];
	int count=1;

	int ultima_cifra[100];

	int i=0;
	int ucf=0;
	while(i<=99)
	{
		int cifra=i%10;
		switch(cifra)
		{
		case 2:
			if(i%4==0)
			{
				ucf=(ucf+6)%10;}
			else if(i%4==1)
			{
				ucf=(ucf+2)%10;
			}
			else if(i%4==2)
			{
				ucf=(ucf+4)%10;
			}
			else
			{
				ucf=(ucf+8)%10;
			}
			break;
		case 3:
			if(i%4==0)
			{
				ucf=(ucf+1)%10;}
			else if(i%4==1)
			{
				ucf=(ucf+3)%10;
			}
			else if(i%4==2)
			{
				ucf=(ucf+9)%10;
			}
			else
			{
				ucf=(ucf+7)%10;
			}
			break;
		case 4:
			if(i%2==0)
			{
				ucf=(ucf+6)%10;}
			else
			{
				ucf=(ucf+4)%10;}
			break;

		case 0: case 1: case 5: case 6:
			ucf=(ucf+cifra)%10;
			break;

		case 7:
			if(i%4==0)
			{
				ucf=(ucf+1)%10;}
			else if(i%4==1)
			{
				ucf=(ucf+7)%10;
			}
			else if(i%4==2)
			{
				ucf=(ucf+9)%10;
			}
			else
			{
				ucf=(ucf+3)%10;
			}
			break;


		case 8:
			if(i%4==0)
			{
				ucf=(ucf+6)%10;}
			else if(i%4==1)
			{
				ucf=(ucf+8)%10;
			}
			else if(i%4==2)
			{
				ucf=(ucf+4)%10;
			}
			else
			{
				ucf=(ucf+2)%10;
			}
			break;

		case 9:

			if(i%2==0)
			{
				ucf=(ucf+1)%10;}
			else
			{
				ucf=(ucf+9)%10;}
		}

		ultima_cifra[i] = ucf;

		i++;
	}
	
	while(count<=t)
	{
		fscanf(f,"%s",numar);
		int i=1;
		int ucf=0;

		int cf;
		
		int length = strlen(numar);

		if(length>1)
			cf = (numar[length-1]-'0')+(numar[length-2]-'0')*10;
		else
			cf = (numar[length-1]-'0');

		g<<ultima_cifra[cf]<<endl;
		count++;
	}
}