Cod sursa(job #2692628)

Utilizator catalin69420Gogu Popescu catalin69420 Data 3 ianuarie 2021 12:57:34
Problema Cifra Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <vector>
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std; // bad practice

uint64_t lastDigitOfPowab(uint64_t a, uint64_t b ) {

    // if a and b both are 0
    if (a == 0 && b == 0)
		return 1;

    // if exponent is 0
    if (b == 0)
        return 1;

    // if base is 0
    if (a == 0)
        return 0;

    // if exponent is divisible by 4 that means last
    // digit will be pow(a, 4) % 10.
    // if exponent is not divisible by 4 that means last
    // digit will be pow(a, b%4) % 10
    uint64_t exp = (b % 4 == 0) ? 4 : (b % 4);

    // Find last digit in 'a' and compute its exponent
    uint64_t res = pow(a % 10, exp);

    // Return last digit of result
    return res % 10;
}

vector<uint64_t> buildVec(uint64_t n) {
	vector<uint64_t> v(n);
	for (uint64_t i = 0; i < v.size(); i++) {
		v[i] = lastDigitOfPowab(i + 1, i + 1);
	}
	return v;
}

uint64_t sum(const vector<uint64_t>& v) {
	uint64_t sum = 0;
	for (auto i:v)
		sum += i;

	return sum;
}

int main() {
	ifstream f("cifra.in");
    ofstream g("cifra.out");
	uint64_t n;
	f >> n;
	for (uint64_t i = 0; i < n; i++) {
		uint64_t num;
		f >> num;
		auto v = buildVec(num);
		g << sum(v) % 10 << endl;
	}
}