Cod sursa(job #472411)

Utilizator marius.bucurBucur Marius - Ovidiu marius.bucur Data 24 iulie 2010 17:57:18
Problema Cifra Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <cstring>

#define MAX_DIGITS 102
#define ld(x) ((x)%10)

using namespace std;

char last_digit(char* bignum)
{
	char powu = bignum[strlen(bignum) - 1];
	char powz;
	if(strlen(bignum) != 1)
		powz = bignum[strlen(bignum) - 2];
	else
		powz = '0';
	char pow_last = (powu - '0') + 10 * (powz - '0');
	powz = powz - '0';
	powu = powu - '0';
	char partial = (pow_last/10 * 7) % 10;
	switch(powu)
	{
		case 0:
			{
				return ld(partial);
			}
		case 1:
			{
				cout << (int)(partial+1) << "\n";
				return ld(partial + 1);
			}
		case 2:
			{
				if(powz % 2)
					return ld(partial + 7);
				else
					return ld(partial + 5);
			}
		case 3:
			{
				if(powz % 2)
					return ld(partial);
				else
					return ld(partial + 2);
			}
		case 4:
			{
				if(powz % 2)
					return ld(partial + 6);
				else
					return ld(partial + 8);
			}
		case 5:
			{
				if(powz % 2)
					return ld(partial + 1);
				else
					return ld(partial + 3);
			}
		case 6:
			{
				if(powz % 2)
					return ld(partial + 7);
				else
					return ld(partial + 9);
			}
		case 7:
			{
				if(powz % 2)
					return ld(partial + 4);
				else
					return ld(partial + 2);
			}
		case 8:
			{
				return ld(partial + 8);
			}
		case 9:
			{
				return ld(partial + 7);
			}
	}
}

char s[MAX_DIGITS];

int main()
{
    ifstream in("cifra.in");
    int N;
    in >> N;
    int total = 0;
    ofstream out("cifra.out");
    for(int i = 0; i < N; i++)
    {
        in >> s;
        out << (int)last_digit(s) << "\n";
    }
    in.close();
    out.close();
    return 0;
}