Wybacz ale może czegoś nie widzę. Ale zrobiłem klika cout’ów żeby wyświetliły mi wyniki. I teraz to wygląda tak.
#include
using namespace std;
unsigned long long int ile,a,b,ktora[4];
int main()
{
cin>>ile;
for(int i=0;i<ile;i++)
{
cin >> a >> b;
if(b==0)cout<<1;
else{
ktora[0]=a%10; cout<<a<<" “; cout<<a%10<<endl;
ktora[1]=a * a%10; cout<<a * a<<” “; cout<<a *a%10<<endl;
ktora[2]=a * a * a%10; cout<<a * a * a<<” “; cout<<a * a * a%10<<endl;
ktora[3]=a * a * a * a%10; cout<<a * a * a * a<<” "; cout<<a * a * a * a%10<<endl;
if (b%4==0) cout<<ktora[3]<<endl;
else if (b%4==1) cout<<ktora[0]<<endl;
else if (b%4==2) cout<<ktora[1]<<endl;
else if (b%4==3) cout<<ktora[2]<<endl;
}
}
return 0;
}
Program zwraca takie wartości
999107 3
999107 7
998214797449 9
997323391634878043 3
13453960652956817745 5
3
9999197 3
9999197 7
99983940644809 9
3634939363436431109 9
6379398151447440337 7
9
99992007 3
99992007 7
9998401463888049 9
2040603067473891991 1
3661983323597490785 5
1
Co jest wynikiem (jeżeli się nie mylę) zgodnym z prawdą.Jeszcze raz dziękuję za wszelką pomoc.
Niestety poprawny jest wynik tylko dla pierwszego przypadku. W dwu pozostałych przypadkach masz zły wynik. Spróbuj znaleźć przyczynę samodzielnie. Przeanalizuj wyniki dla takich przypadków:
9
7 3
97 3
997 3
9997 3
99997 3
999997 3
9999997 3
99999997 3
999999997 3
W dwóch Twój kod daje niepoprawny wynik. Zgadnij w których…
Do testowania kodu najlepiej użyć Ideone, zamiast wklejać kod też lepiej jest podać link do kodu w Ideone.
Również ja mam problem z tym zadaniem :/. Mój kod wydaje się działać jednak spoj zwraca błędną odpowiedź. Nie mam pojęcia co może nie działać. Poniżej mój kod:
#include
using namespace std;
int pot(int a,int b)
{
int c=1;
for (int i=0; i<b; i++)
{
c*=a;
}
return c;
}
int main()
{
int t;
cin>>t;
long int tab[t];
long int tab2[t];
long int tab3[t];
for (int i=0; i<t; i++)
{
cin>>tab[i]>>tab2[i];
if (tab2[i]==0) tab[i]=1;
tab[i]=tab[i]%10;
tab2[i]=tab2[i]%10;
if (tab2[i]==0) tab2[i]=10;
}
for (int i=0; i<t; i++)
{
if (tab[i]==0) tab3[i]=10;
else tab3[i]=pot(tab[i],tab2[i]);
cout<<tab3[i]%10<<endl;
}
return 0;
}
Moze podpowiem gdzie lezy podstawowy problem
Pierwsza linijka zgoda. Tylko cyfra jednosci w podstawie wplywa na cyfre jednosci w wyniku. (latwo zauwazyc przy mnozeniu pisemnym)
Druga linijka niestety to nie zadziala.
przyklad:
2 do potegi 10 = 1024,
2 do potegi 20 = 1048576
cyfry jednosci sa rozne
Czyli na pewno nie bedzie dzialac dla %10.
Dla pewnej wartosci zadziala. Ja uzylem arkusz kalkulacyjny do przeliczenia kolejnych poteg dla wielu kolejnych podstaw i zauwazenia cyklicznosci. Mozna tez policzyc na kalkulatorze, na kartce zapisac tabelke.
Nie wchodząc w Twój algorytm dodałbym jeszcze jeden podstawowy błąd. Dla zwykłej tablicy w c++ musisz podać jej rozmiar jeszcze przed kompilacją. Jeśli chcesz podawać rozmiar w trakcie wykonywania zastosuj tablicę dynamiczną albo użyj bardzo wygodnego kontenera jaki jest vector. Tak nawiasem mówiąc to używanie tablicy jest tu niepotrzebne, możesz na bieżąco liczyć ostatnią cyfrę z a^b i dawać to na wyjście.
Witam,
Kod: https://ideone.com/wcTpXm7
w ideone daje poprawne odpowiedzi, natomiast w spoj-u zwraca mi błąd wykonania SIBART.
Witam.
Napisałem kodzik, testuje wiele liczb i wszystko wychodzi mi poprawnie. Wrzucam do SPOJa to wyskakuje mi "błędna odpowiedź"
KOD: https://ideone.com/STeUIx14
Przeczytałem powyżej kilka różnych problemów ale w żadnym nie ujrzałem tego co mogło by mi pomóc.
Swoją drogą zauważyłem, że moje rozwiązanie na tle innych jest nietypowe.
Będę wdzięczny za znalezienie błędu.
-
Jeśli zaczynasz, przeczytaj koniecznie! <--kliknij w to proszę!
-
Trzeba sprawdzic format wyjscia. Troche kawa na lawe, ale brakuje naprawde niewiele do zaliczenia. Po zaliczeniu skasuj kod w swoim poscie.
Cześć, zamieszczam kod który działa mi bez zarzutu gdy go otworze, a jednak na spoju wyskakuje błędne rozwiązanie lub błąd kompilacji. Wie ktoś może gdzie jest błąd?
#include
#include
#include
using namespace std;
int main()
{
int t, i,j,a,b;
//double a, b;
cin >> t;
for (i = 0; i < t; i++)
{
cin >> a >> b;
int p = pow(a, b);
string s = to_string§;
for (j = 0; j <= s.length(); j++)
{
char x = s[j];
if (j == s.length()-1)
{
cout << x << endl;
}
}
}
return 0;
}