SPOJ - zadanie z potęgowaniem
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

SPOJ - zadanie z potęgowaniem

AutorWiadomość
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 :

C/C++
#include <iostream>
#include <cstdlib>

/// SPOJ - czy umiesz potegowac

using namespace std;

void sprawdz0( int op ) // sprawdzam dla ostatniej 0
{
    cout << op << endl;
}

void sprawdz1( int op ) // sprawdzam dla wykladnika 1
{
    cout << op << endl;
}

void sprawdz2( int w ) // sprawdzam dla ostatniej 2
{
    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 ) // sprawdzam dla ostatniej 3
{
    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 ) // sprawdzam dla ostatniej 4
{
    if( w % 2 == 0 )
         cout << "6" << endl;
    else
         cout << "4" << endl;
   
}

void sprawdz5( int op ) // sprawdzam dla wykladnika 5
{
    cout << op << endl;
}

void sprawdz6( int op ) // sprawdzam dla wykladnika 6
{
    cout << op << endl;
}

void sprawdz7( int w ) // sprawdzam dla ostaniej 7
{
    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 ) // sprawdzam dla ostaniej 8
{
    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 ) // sprawdzam dla ostatniej 9
{
    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;
}
P-174067
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.
P-174068
» 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.
P-174069
» 2019-02-24 15:30:30
Można użyć funkcji std::pow.
P-174070
» 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ść.
P-174071
» 2019-02-25 10:31:03
P-174072
« 1 »
 Strona 1 z 1