Zadanie spoj - Czy umiesz potęgować - przekroczono limit czasu

0

Wstawiam kod. Czy ktoś mógłby mi powiedzieć dlaczego występuje ten błąd?

#include <iostream>

using namespace std;

int main()
{
	int l_test;
	long long liczba, wykladnik, wynik;	
	cin >> l_test;
	
	for(int i=0; i<l_test; i++)
	{
		cin >> liczba >> wykladnik;
		wynik = liczba;
		for(int i=0; i<=wykladnik-2; i++)
		{
			wynik = wynik * liczba;
		}
		cout << wynik%10 << endl;
	}
	
	return 0;
}
0

Warunek w zadaniu jest taki 1 ≤ a,b ≤ 1 000 000 000, więc program powinien być zaakceptowany.
Uproszczony program z pow z cmath też nie przechodzi:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
	int l_test;
	long liczba, wykladnik, wynik;	
	cin >> l_test;
	
	for(int i=0; i<l_test; i++)
	{
		cin >> liczba >> wykladnik;
		wynik = pow(liczba, wykladnik);
		cout << wynik%10 << endl;
	}
	
	return 0;
}
1

W zadaniach na SPOJu chodzi o to, aby myśleć, a nie działać na pałę. Wcale nie musisz wykonywać potęgowania na całych liczbach, aby wiedzieć, jaka będzie ostatnia cyfra.

Zresztą powodzenia w liczeniu miliarda do potęgi miliarda na standardowych typach danych - jesteś w ogóle świadom jak ogromne są to liczby? ;-)

1

@crassman22: wypisz sobie na kartce kolejne potęgi i spróbuj zauważyć regularność...

0

Myślę że teraz jest okej, a jednak dalej nie przechodzi :)

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
	long l_test, liczba, wykladnik, wynik;	
	
	cin >> l_test;
	for(int i=0; i<l_test; i++)
	{
		cin >> liczba >> wykladnik;
		wynik = pow(liczba, wykladnik%4);
		if(wynik == 1) {wynik = 6;}
		cout << wynik%10 << endl;
	}
	
	return 0;
}
0

Nie zadziała dla wykładników podzielnych przez 4, popraw to. Dodatkowo liczbę możesz dać % 10. Po poprawie tych 2 rzeczy, dostałem twoim kodem zaliczenie z czasem 0.00

1 użytkowników online, w tym zalogowanych: 0, gości: 1