PA05_POT - Czy umiesz potęgować spoj

0

Mam problem z zadaniem http://pl.spoj.com/problems/PA05_POT/
Napisałem taki kod ale najwyraźniej coś nie gra tak jak powinno. Orientuje się ktoś co robię nie tak/ czego baruje?

import java.util.Scanner;

public class SUMA {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int ile = scanner.nextInt();
		int[] tab = new int[ile * 2];
		int reszta;
		int wynik;
		for (int i = 0; i <= ile * 2-1; i = i + 2) {//parzyste podstawa, nieparzyste wykładnik
			tab[i] = scanner.nextInt();
			tab[i + 1] = scanner.nextInt();

		}
		

		
		for (int i = 0; i <= ile * 2 - 2; i = i + 2) {
			wynik = 1;
			reszta = tab[i + 1] % 4;

			if (reszta > 0) {
				for (int j = 1; j <= reszta; j++) {
					wynik = wynik * tab[i];

				}
				System.out.println(wynik % 10);

			}

			else {
				wynik = tab[i] * tab[i] * tab[i] * tab[i];
				System.out.println(wynik % 10);
			}
		}

	}

}
0
  1. reszta = tab[i + 1] % 4; - jaka reszta? jakie modulo 4?
  2. wynik = tab[i] * tab[i] * tab[i] * tab[i]; co to ma robić?
  3. nie potrzebujesz mnożyć całych liczb, aby wiedzieć, jaka będzie ostatnia cyfra działania a^b - o to chodzi w tym zadaniu.
0

@Patryk27
1)
cyfry jedności powtarzają się wraz ze wzrostem o 4 potęgi stąd reszta = tab[i + 1] % 4;
a tab[i + 1] jest u mnie zawsze wykładnikiem

jeśli reszta =1 to cyfra jedności będzie taka jak cyfra jedności wyrażenia a^1
jeśli reszta =2 to cyfra jedności będzie taka jak cyfra jedności wyrażenia a^2
jeśli reszta =4 to cyfra jedności będzie taka jak cyfra jedności wyrażenia a^3
jeśli reszta =0 to cyfra jedności będzie taka jak cyfra jedności wyrażenia a^4

trochę pojechałem powinno być wynik= (int)Math.pow(tab[i],4);
3) oczywiście że nie będę mnożył 5351^45435 i nigdzie tego w programie nie robię. Mnożę co najwyżej do 4 potęgi. bo mając liczbę jedności z 1,2,3 i 4 potęgi mam liczbę jedności z n1 / n2 / n3 /n4 potęgi tak jak pisałem w pkt 1.

jeszcze nadmienię że testowałem program dla wielu potęg i wyglądało mi na to że program działa poprawnie

0

U Ciebie w programie 5 do 0 = 5. Zrób sobie solidny zestaw testów na start.

0

@kapojot
działamy na (1 ≤ a,b ≤ 1 000 000 000). więc 5^0 mnie nie interesuje

0

Co nie zmienia faktu, że na dzień dobry masz buga. Dalej nawet nie szukałem.

0

@kapojot

Specjalnie dla Ciebie dopisałem obsługę potęgi zerowej. W ten sposób wykonałem coś o co nie byłem proszony a otrzymałem wydłużony czas działanie programu. ( ͡° ͜ʖ ͡°)

import java.util.Scanner;

public class SUMA {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int ile = scanner.nextInt();
		int[] tab = new int[ile * 2];
		int reszta;
		int wynik;
		for (int i = 0; i <= ile * 2-1; i = i + 2) {//parzyste podstawa, nieparzyste wykładnik
			tab[i] = scanner.nextInt();
			tab[i + 1] = scanner.nextInt();

		}
		

		
		for (int i = 0; i <= ile * 2 - 2; i = i + 2) {
			
			
			if(tab[i + 1]==0)
				System.out.println("1");
			
			
			else{
			wynik = 1;
			reszta = tab[i + 1] % 4;

			if (reszta > 0) {
				for (int j = 1; j <= reszta; j++) {
					wynik = wynik * tab[i];

				}
				System.out.println(wynik % 10);

			}

			else {
				wynik= (int)Math.pow(tab[i],4);
			
				System.out.println(wynik % 10);
			}
		}

	}
	}

}
0

(a mod 10)(4 + b mod 4) ma tę samą cyfrę jedności co ab, gdzie 1 <= a,b

0

Kłaniam się uprzejmie i dziękuję za wysiłek nie wiadomo po co.

A tutaj działający kod.

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int a, b, ile, reszta, wynik;

		ile = scanner.nextInt();

		for (int i = 0; i < ile; i++) {
			a = scanner.nextInt();
			b = scanner.nextInt();

			wynik = a % 10;
			reszta = b % 4;

			if (reszta == 0)
				wynik = (a % 10) * (a % 10) * (a % 10) * (a % 10) % 10;
			for (int j = 1; j < reszta; j++)
				wynik = wynik * (a % 10);
			System.out.println(wynik % 10);
		}
	}
}

@VereX: Bzdura. Dla a = 10 i b = 4 masz nan po lewej stronie zgodnie z Twoim wzorem.

Edit:
@VereX: Po ostatniej edycji zwracam honory.

0

Rozwiązanie napisane na podstawie mojej wypowiedzi:

import java.util.Scanner;
class Main{
	public static void main (String[] args) throws java.lang.Exception {
	Scanner scanner = new Scanner(System.in);
        
        for (int t = scanner.nextInt(); t > 0; t--)
           System.out.println(((int)Math.pow(scanner.nextInt()%10, 4+scanner.nextInt()%4)%10));
 }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1