Cod sursa(job #522316)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 14 ianuarie 2011 20:25:19
Problema Cifra Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include<fstream>
#include<string>
using namespace std;
int t,a[]={1,5,2,8,3,9,2,8,7,7,8,4,7,3,8,4,1,5,4,4};
char s[102];

/*int Divizibil3(char s[],int n)
{
	int sum=0,i;
	for(i=0;i<n;i++)
		sum=sum+(s[i]-'0');
	if(sum%3==0)
		return 1;
	return 0;
}

int Divizibil20(char s[],int n)
{
	int x;
	x=(s[n-1]-'0')+(s[n-2]-'0')*10;
	if(x%4==0 && x%5==0)
		return 1;
	return 0;
}

int Divizibil40(char s[],int n)
{
	int x;
	x=(s[n-1]-'0')+(s[n-2]-'0')*10+(s[n-3]-'0')*100;
	if(x%8==0 && x%5==0)
		return 1;
	return 0;
}

int Divizibil60(char s[],int n)
{
	if(Divizibil3(s,n) && Divizibil20(s,n))
		return 1;
	return 0;
}

int Divizibil80(char s[],int n)
{
	int x;
	x=(s[n-1]-'0')+(s[n-2]-'0')*10+(s[n-3]-'0')*100+(s[n-4]-'0')*1000;
	if(x%16==0 && x%5==0)
		return 1;
	return 0;
}

int Divizibil100(char s[],int n)
{
	int x;
	x=(s[n-1]-'0')+(s[n-2]-'0')*10;
	if(x==0)
		return 1;
	return 0;
}

int Divizibil120(char s[],int n)
{
	int x;
	x=(s[n-1]-'0')+(s[n-2]-'0')*10+(s[n-3]-'0')*100;
	if(x%8==0 && x%5==0 && Divizibil3(s,n))
		return 1;
	return 0;
}*/

int Impartire120(char s[],int n)
{
	if(n==1) return (s[0]-'0');
	if(n==2) return ((s[0]-'0')*10+(s[1]-'0'));
	int a[n];
	int i,t;
	for(i=0;i<n;i++)
		a[i]=s[i]-'0';
	t=a[0]*100+a[1]*10+a[2];
	for(i=4;i<n;i++)
	{
		t=t%120;
		t=t*10+a[i];
	}
	return t;
}
int main()
{
	int i,n,r,sol;
	ifstream fin("cifra.in");
	ofstream fout("cifra.out");
	fin>>t;
	for(i=1;i<=t;i++)
	{
		fin>>s;
		n=strlen(s);
		r=Impartire120(s,n);
		sol=(r/20)*4;
		if(r%20) sol+=a[r%20-1];
		fout<<(sol%10)<<"\n";
		memset(s,' ',sizeof(s));
	}
	fin.close();
	fout.close();
	return 0;
}