• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

SPOJ - Czy umiesz potęgować?

0 głosów
736 wizyt
pytanie zadane 18 sierpnia 2018 w SPOJ przez Nowacx02 Obywatel (1,060 p.)
zmienione kategorie 18 sierpnia 2018 przez Nowacx02

Witam ma ktoś pomysł dlaczego SPOJ nie przyjmuje mi kodu i wyświetla "Błędna odpowiedź"

Oto treść zadania:

Dla danych dwóch liczb naturalnych a i b, wyznaczyć ostatnią cyfrę liczby ab.

Zadanie
Napisz program, który:

  • wczyta ze standardowego wejścia: podstawę a oraz wykładnik b,
  • wyznaczy ostatnią cyfrę liczby ab,
  • 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 abzapisanej dziesiętnie.

Przykład
Dla danych wejściowych:

2
2 3
3 3

poprawną odpowiedzią jest:

8
7

 

A to mój kod:

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int n;
    cin>>n;

    for(int i=0; i<n; i++)
    {
        long long a,b,c=0;
        string napis;
        cin>>a>>b;
        if (a==0||b==0)
        {
            cout<<1<<endl;
            continue;
        }
        if (a==1)
        {
            cout<<b%10<<endl;
            continue;
        }
        if (a>10)
            a%=10;

        switch (a)
        {
        case 1:
            cout<<1<<endl;                            
            break;
        case 2:
            b%=4;
                switch(b)
                {
                case 0: cout<<6<<endl; break;
                case 1: cout<<2<<endl; break;
                case 2: cout<<4<<endl; break;
                case 3: cout<<8<<endl; break;
                }
            break;
        case 3:
            b%=4;
                switch(b)
                {
                case 0: cout<<1<<endl; break;
                case 1: cout<<3<<endl; break;
                case 2: cout<<9<<endl; break;
                case 3: cout<<7<<endl; break;
                }
            break;
        case 4:
            b%=2;
                switch(b)
                {
                case 0: cout<<6<<endl; break;
                case 1: cout<<4<<endl; break;
                }
            break;
        case 5:
                cout<<5<<endl;
            break;
        case 6:
                cout<<6<<endl;
            break;
        case 7:
              b%=4;
                switch(b)
                {
                case 0: cout<<1<<endl; break;
                case 1: cout<<7<<endl; break;
                case 2: cout<<9<<endl; break;
                case 3: cout<<3<<endl; break;
                }
            break;
        case 8:
            b%=4;
                switch(b)
                {
                case 0: cout<<6<<endl; break;
                case 1: cout<<8<<endl; break;
                case 2: cout<<4<<endl; break;
                case 3: cout<<2<<endl; break;
                }
            break;
        case 9:
            b%=2;
                switch(b)
                {
                case 0: cout<<1<<endl; break;
                case 1: cout<<9<<endl; break;
                }
            break;
       case 0:
                cout<<0<<endl;
            break;
        }

    }

    return 0;
}

 

komentarz 18 sierpnia 2018 przez Mariusz08 Maniak (62,280 p.)
Przenieś pytanie do kategorii SPOJ

1 odpowiedź

+1 głos
odpowiedź 18 sierpnia 2018 przez niezalogowany
wybrane 18 sierpnia 2018 przez Nowacx02
 
Najlepsza

Dwa case masz błędne:

  1. Dla a = 1 wynik powinien wynosić 1: 
    case 1:
    	cout << 1 << endl;
    	break;
    
  2. Sytuacja gdy a = 10 nie ma miejsca, bo np. 10 % 10 daje 0:

    case 0:
    	cout << 0 << endl;
    	break;

    Teraz wszystko powinno działać. Kod mógłbyś znacznie skrócić używając tablicy. PS. Zamiast kopiować całą treść zadania lepiej podać link ;)

komentarz 18 sierpnia 2018 przez Nowacx02 Obywatel (1,060 p.)

Poprawiłem, ale nadal wyrzuca "Błędna odpowiedź"


#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int n;
    cin>>n;

    for(int i=0; i<n; i++)
    {
        long long a,b;
        string napis;
        cin>>a>>b;
        if (a==0||b==0)
        {
            cout<<1<<endl;
            continue;
        }
        if (a==1)
        {
            cout<<b%10<<endl;
            continue;
        }
        if (a>=10)
            a%=10;

        switch (a)
        {
        case 1:
            cout<<1<<endl;
            break;
        case 2:
            b%=4;
                switch(b)
                {
                case 0: cout<<6<<endl; break;
                case 1: cout<<2<<endl; break;
                case 2: cout<<4<<endl; break;
                case 3: cout<<8<<endl; break;
                }
            break;
        case 3:
            b%=4;
                switch(b)
                {
                case 0: cout<<1<<endl; break;
                case 1: cout<<3<<endl; break;
                case 2: cout<<9<<endl; break;
                case 3: cout<<7<<endl; break;
                }
            break;
        case 4:
            b%=2;
                switch(b)
                {
                case 0: cout<<6<<endl; break;
                case 1: cout<<4<<endl; break;
                }
            break;
        case 5:
                cout<<5<<endl;
            break;
        case 6:
                cout<<6<<endl;
            break;
        case 7:
              b%=4;
                switch(b)
                {
                case 0: cout<<1<<endl; break;
                case 1: cout<<7<<endl; break;
                case 2: cout<<9<<endl; break;
                case 3: cout<<3<<endl; break;
                }
            break;
        case 8:
            b%=4;
                switch(b)
                {
                case 0: cout<<6<<endl; break;
                case 1: cout<<8<<endl; break;
                case 2: cout<<4<<endl; break;
                case 3: cout<<2<<endl; break;
                }
            break;
        case 9:
            b%=2;
                switch(b)
                {
                case 0: cout<<1<<endl; break;
                case 1: cout<<9<<endl; break;
                }
            break;
       case 0:
                cout<<0<<endl;
            break;
        }

    }

    return 0;
}

 

komentarz 18 sierpnia 2018 przez niezalogowany

Usuń tę instrukcję:

if (a == 1)
{
	cout << b % 10 << endl;
	continue;
}
komentarz 18 sierpnia 2018 przez niezalogowany

Jeszcze jedno w zdaniu a, b > 0, ale gdybyś chciał uwzględnić z zerami to musiałbyś zrobić 3 warunki dla:

  1. 0^0 - symbol nieoznaczony, lub 1
  2. a != 0, a^0 = 1
  3. b != 0, 0^b = 0
komentarz 18 sierpnia 2018 przez Nowacx02 Obywatel (1,060 p.)
Dzięki teraz działa masz naj :)

Podobne pytania

+1 głos
1 odpowiedź 2,587 wizyt
0 głosów
3 odpowiedzi 690 wizyt
pytanie zadane 24 lutego 2017 w SPOJ przez Mateusz K Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 1,146 wizyt
pytanie zadane 7 lutego 2023 w SPOJ przez Tactykalier Nowicjusz (200 p.)

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...