Zastanawiałem się nad rozwiązaniem tego zadania ( moje wypociny są poniżej ) . Czy ktoś mógłby zasugerować bardziej subtelny sposób na rozkładanie dużych liczb na czynniki pierwsze?
Treść zadania:
"Użyj klawiatury, aby wprowadzić liczbę. Określ liczbę cyfr parzystych i cyfr nieparzystych we wprowadzonej liczbie.
Jeśli liczba ta jest podzielna przez 2 bez reszty (tzn. reszta jest równa zero), to jest ona parzysta.
Wtedy zwiększamy licznik cyfr parzystych (zmienna statyczna parzyste) o 1.
A jeśli liczba jest nieparzysta, zwiększamy licznik cyfr nieparzystych (zmienna statyczna nieparzyste).
Wyświetl następującą informację: "Parzyste: a Nieparzyste: b", gdzie a jest liczbą parzystych cyfr, a b jest liczbą cyfr nieparzystych."
Moje rozwiązanie:
import java.io.*;
class w {
public static int parzyste;
public static int nieparzyste;
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int a=Integer.parseInt(br.readLine());
int ala[]=new int[7];
if (a>10000000){
System.out.println("Liczba przekracza zakres");
}
else{
ala[0]=a/1000000; //Rozkłada liczbe na liczbe milionów ,setek tysiecy itd
ala[1]=(a-(ala[0]*1000000))/100000; //Maksymalna możliwa do wprowadzenia liczba to 9 999 999
ala[2]=(a-(ala[0]*1000000)-(ala[1]*100000))/10000;
ala[3]=(a-(ala[0]*1000000)-(ala[1]*100000)-(ala[2]*10000))/1000;
ala[4]=(a-(ala[0]*1000000)-(ala[1]*100000)-(ala[2]*10000)-(ala[3]*1000))/100;
ala[5]=(a-(ala[0]*1000000)-(ala[1]*100000)-(ala[2]*10000)-(ala[3]*1000)-(ala[4]*100))/10;
ala[6]=(a-(ala[0]*1000000)-(ala[1]*100000)-(ala[2]*10000)-(ala[3]*1000)-(ala[4]*100)-(ala[5]*10));
for(int i=0;i<7;i++){ //sprawdza czy kazda skłądowa liczby jest parzysta
if(ala[i]%2==0&&ala[i]!=0){
parzyste++;
}
else{
if(ala[i]!=0){
nieparzyste++;
}
}
}
}
System.out.println("Parzyste: "+parzyste+" Nieparzyste: "+nieparzyste);
}
}