Więc, żeby nie rozpisywać się zbytnio powiem co i jak. Stworzyłem kod do tego zadania oparty na ifach(wcześniej gdy chodziło o szybkość wykonania ta metoda górowała).
Teoretycznie wszystko jest w porządku, daje dobre wyniki przy kompilacji na moim komputerze, jednak SPOJ już krzyczy "Błędna odpowiedź!". Więc czy ja jakąś ważną zasadę potęgowania pominąłem w swoim kodzie, czy to po prostu w całości błędne myślenie?
Oto mój kod:
int main()
{
int ile, a, b; //ile = ilość powtórzeń
//a = podstawa
//b = wykładnik
cin >> ile;
for(int i = 0; i < ile; i++)
{
cin >> a >> b;
if(a < 0) //jesli podstawa mniejsza od 0
a *= -1; //zamień podstawę na dodatnią
a = a%10 //jedność podstawy
b = b%10; //jedność wykładnika
if(b < 0)
a = 1/a; //jeśli potęga jest ujemna to zamieniamy podstawę na odwrotność
if(a == 5 || a == 6 || a == 0 || a == 1)
cout << a << endl; //dla tych liczb zawsze jednością jest podstawa
else if(b%4==1)
{
cout << a << endl;
}
else if(a == 4 || a == 9)
{
if(b%2 == 1)
cout << a << endl;
else
{
if(a == 4)
cout << "6" << endl;
else
cout << "1" << endl;
}
}
else if(b%4 == 0)
{
if(a%2 == 0)
cout << "6" << endl;
else
cout << "1" << endl;
}
else if(b%4 == 2)
{
if(a%2 == 0)
cout << "4" << endl;
else
cout << "9" << endl;
}
else
{
if(a==2 || a==3 || a== 7 || a == 8)
cout << 10-a << endl;
}
}
return 0;
}