Witam wszystkich. Celem programu jest wyznaczanie ostatniej cyfry z liczb podniesionych do potęgi. - http://pl.spoj.com/problems/PA05_POT/
Mam problem z kodem - wydaje mi się poprawny, jednak daje błędne wyniki. Przykładem mogą być tutaj 1^7; 0^5 czy 2^3.
Kod analizowałem ale za cholerę nie mogę znaleŹć przyczyny problemu.
#include <stdio.h>
//bledna odpowiedz ? ;(
int obcinamy (unsigned long long int x) {
return(x % 10);
}
int cyfry (unsigned long long int A, unsigned long long int B) {
//tylko ostatnia cyfra
int AA = obcinamy(A);
if (B==0) return 1;
else if (AA==0 || AA==1) return A;
else if (AA == 2) {
B = B % 4;
if (B == 0) return 6;
else if (B == 1) return 2;
else if (B == 2) return 4;
else if (B == 3) return 8;
}
else if (AA == 3) {
B = B % 4;
if (B == 0) return 1;
else if (B == 1) return 3;
else if (B == 2) return 9;
else if (B == 3) return 7;
}
else if (AA == 4) {
B = B % 2;
if (B == 0) return 6;
else if (B == 1) return 4;
}
else if (AA == 5) return 5;
else if (AA == 6) return 6;
else if (AA == 7) {
B = B % 4;
if (B == 0) return 1;
else if (B == 1) return 7;
else if (B == 2) return 9;
else if (B == 3) return 3;
}
else if (AA == 8) {
B = B % 4;
if (B == 0) return 6;
else if (B == 1) return 8;
else if (B == 2) return 4;
else if (B == 3) return 2;
}
else if (AA == 9) {
B = B % 2;
if (B == 0) return 1;
else if (B == 1) return 9;
}
}
int main() {
unsigned long long int a, b;
int n, licznik;
scanf("%d", &n);
for (licznik = 0; licznik < n; ++licznik) {
scanf("%d", &a);
scanf("%d", &b);
printf("%d\n", cyfry(a,b));
}
return 0;
}