SPOJ - zadanie z potęgowaniem
Ostatnio zmodyfikowano 2019-02-25 10:31
Paja Temat założony przez niniejszego użytkownika |
SPOJ - zadanie z potęgowaniem » 2019-02-24 11:55:40 Cześć. Testuje już od jakiegoś czasu, i wszystko jest ok. Nie wiem dlaczego SPOJ mi to odrzuca. zakres wejściowy jest od 1, więc zera nie bierzemy pod uwagę ani w podstawie ani w wykładniku. Proszę o jakąś sugestie. Zadanie : Dla danych dwóch liczb naturalnych a i b, wyznaczyć ostatnią cyfrę liczby a do potęgi b.
Zadanie Napisz program, który: wczyta ze standardowego wejścia: podstawę a oraz wykładnik b, wyznaczy ostatnią cyfrę liczby a do potęgi b, wypisze wynik na standardowe wyjście. Wejście W pierwszej linii wejścia znajduje się jedna liczba całkowia D (1≤D≤10), oznaczjąca liczbę przypadków do rozważenia. Opis każdego przypadku podany jest w jednym wierszu, zawierającym dwie liczby naturalne a i b oddzielone pojedynczym odstępem (spacją), takie, że (1 ≤ a,b ≤ 1 000 000 000).
Wyjście Dla każdego przypadku z wejścia Twój program powinien wypisać (w osobnej linii dla każdego przypadku z wejścia) cyfrę jedności liczby a do potęgi b zapisanej dziesiętnie.
Przykład Dla danych wejściowych: 2 2 3 3 3 poprawną odpowiedzią jest: 8 7
a tutaj kod : #include <iostream> #include <cstdlib>
using namespace std;
void sprawdz0( int op ) { cout << op << endl; }
void sprawdz1( int op ) { cout << op << endl; }
void sprawdz2( int w ) { int b = 0; int i = 0; { for( i = w; i >= 0; i = i - 4 ) { } b =( i *( - 1 ) ) + 1; if( b == 4 ) cout << "2" << endl; else if( b == 3 ) cout << "4" << endl; else if( b == 2 ) cout << "8" << endl; else if( b == 5 ) cout << "6" << endl; } }
void sprawdz3( int w ) { int b = 0; int i = 0; { for( i = w; i >= 0; i = i - 4 ) { } b =( i *( - 1 ) ) + 1; if( b == 4 ) cout << "3" << endl; else if( b == 3 ) cout << "9" << endl; else if( b == 2 ) cout << "7" << endl; else if( b == 5 ) cout << "1" << endl; } }
void sprawdz4( int w ) { if( w % 2 == 0 ) cout << "6" << endl; else cout << "4" << endl; }
void sprawdz5( int op ) { cout << op << endl; }
void sprawdz6( int op ) { cout << op << endl; }
void sprawdz7( int w ) { int b = 0; int i = 0; { for( i = w; i >= 0; i = i - 4 ) { } b =( i *( - 1 ) ) + 1; if( b == 4 ) cout << "7" << endl; else if( b == 3 ) cout << "9" << endl; else if( b == 2 ) cout << "3" << endl; else if( b == 5 ) cout << "1" << endl; } }
void sprawdz8( int w ) { int b = 0; int i = 0; { for( i = w; i >= 0; i = i - 4 ) { } b =( i *( - 1 ) ) + 1; if( b == 4 ) cout << "8" << endl; else if( b == 3 ) cout << "4" << endl; else if( b == 2 ) cout << "2" << endl; else if( b == 5 ) cout << "6" << endl; } }
void sprawdz9( int w ) { if( w % 2 == 0 ) cout << "1" << endl; else cout << "9" << endl; }
int main() { int n; cin >> n; int pod = 0; int wyk = 0; unsigned long long wynik; for( int i = 1; i <= n; i++ ) { cin >> pod >> wyk; int ostPod = pod % 10; if( wyk == 1 ) { sprawdz1( ostPod ); continue; } if( ostPod == 8 ) sprawdz8( wyk ); if( ostPod == 2 ) sprawdz2( wyk ); if( ostPod == 3 ) sprawdz3( wyk ); if( ostPod == 4 ) sprawdz4( wyk ); if( ostPod == 5 ) sprawdz5( ostPod ); if( ostPod == 6 ) sprawdz6( ostPod ); if( ostPod == 7 ) sprawdz7( wyk ); if( ostPod == 9 ) sprawdz9( wyk ); if( ostPod == 0 ) sprawdz0( ostPod ); } return 0; } |
|
Paja Temat założony przez niniejszego użytkownika |
» 2019-02-24 12:01:51 I jeszcze konsola : 9 356 543 6 8767 5436 1 4 9 4 8768965 1 5 7678864 65478657 4 7657576 5535 6 6598195 43211 5 521360 15243 0 15243 34241 3
Process returned 0 (0x0) execution time : 55.337 s Press any key to continue.
|
|
pekfos |
» 2019-02-24 13:21:22 Słyszałeś kiedyś o tablicach? Całą tę logikę możesz zastąpić jedną tablicą i paroma liniami kodu. Możesz albo zacząć testować ten kod z głową, a więc proste przypadki a nie jakieś bezsensowne losowe liczby i poprawiać pojedyncze przypadki, albo możesz napisać ten kod z głową, kilka razy krócej. |
|
Monika90 |
» 2019-02-24 15:30:30 Można użyć funkcji std::pow. |
|
jankowalski25 |
» 2019-02-24 20:19:05 Nie ma takiej potrzeby. Jest 10 cyfr, każda ma maksymalny okres 4, co łącznie daje 40 przypadków. Wystarczy prosta tablica znaków na 40 bajtów, z podstawy tylko ostatnia cyfra ma jakiekolwiek znaczenie, z wykładnika wystarczy wziąć modulo 4. Dalej z tych dwóch wartości można zrobić indeks tablicy i wypisać odpowiednią cyfrę. std::pow tylko niepotrzebnie spowalniałoby całość. |
|
nanoant20 |
» 2019-02-25 10:31:03 |
|
« 1 » |