Mam problem,
Długo rozwiązywałem zadanie na spoju: https://pl.spoj.com/problems/PA05_POT/ , które było wałkowane wiele razy. Mój sposób to sprawdzanie po kolei jakie są ostatnie cyfry liczby potęgowanej i dopasowywanie do podanej potęgi. W programie działa wszystko, łącznie z 1000000 do potęgi 1000000, ale spoj nie akceptuje mojego wyniku, jakbym program się nie kończył.
Kod:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int potega(int a, int b)
{
if(b==0) //jeśli potęga podnoszona jest do potegi 0, wynik zawsze to 1
return 1;
vector <int> wyniki;// stowrzenie Vectora,który będzie zapisywał kolejne ostatnie cyfry liczby podnoszonej do potęgi
int c=a%10; //liczba c jest ostatnią cyfrą potęgi podanej liczby do potegi pierwszej
int x; // x będzie przyjmowało każda kolejna ostatnia cyfra liczby podnoszonej do potegi
int ktory;//ktory przechowuje ktora liczba w tablicy ma pokazac
int d=2;//pierwszy wykladnik potegi, zwiekszany w klamrze o 1
wyniki.push_back(c);//dodanie pierwszej cyfry do "tablicy"
while(x!=c) //jesli obliczona cyfra bedzie taka sama jak pierwsza, petla się zakończy
{
unsigned long long xyz;// xyz jest liczbą podniesioną do potęgi
xyz=pow(a,d);
x=(xyz%10);//obliczanie ostatniej cyfry liczby podniesionej do potęgi
wyniki.push_back(x);//dodanie liczby x do tablicy
d++;//inkrementacja wykłądnika
}
wyniki.pop_back();//usuniecie ostatniej liczby(jest taka sama jak pierwsza)
ktory=b%wyniki.size();(obliczanie ile liczb jest w "tablicy"
if(wyniki.size()==1)//jesli dlugosv tablicy jest rowna 1, zwroci jedyna liczbe
return c;
if(ktory==0) // jesli
return wyniki[0];
else
return wyniki[ktory-1];
}
int main()
{
int d;
cin>>d;
for(int i=1;i<=d;i++)
{
int a,b;
cin>>a>>b;
cout<<potega(a,b)<<endl;
}
return 0;
}
Z góry dziękuje za wszystkie porady !