Zadanie rozwiązane w niezbyt "elegancki" sposób

0

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);
}
 }
2

String to de facto tablica charów, proponuję to wykorzystać, tylko pamiętaj o tym że jak byś chciał przekształcić znak w liczbę to trzeba to odpowiednio zrobić ;)
1)Wczytujesz stringa
2)Sprawdzasz czy to liczba
3)Przechodzisz po znakach w Stringu w pętli for each :)
Resztę się domyśl :)

0

Niebo do ziemi dzięki :D

import java.io.*;


public class w1{

  public static int parzyste,nieparzyste;

public static void main (String[]args) throws NumberFormatException, IOException {

  BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

  String a=br.readLine();

  int b=a.length();

  char[]ala=a.toCharArray();

  for(int i=0;i<b;i++){

    int r=(int)ala[i]-48;
    if(r%2==0){
      parzyste++;
    }
    else{
      nieparzyste++;
    }   

  }
  System.out.println("Parzyste: "+parzyste+"Nieparzyste: "+nieparzyste);

}
}

1

Owszem, tylko po co string?

import java.io.*;
import java.util.Scanner;
class Main {
  static boolean even(int n) {
    return n % 2 == 0;
  }
  static void numberOfEvenOdd(int n) {
    if (n == 0) {
      System.out.println("even digits: " + 1 + " odd digits: " + 0);
      return;
    }
    int evenCnt = 0;
    int oddCnt = 0;
    while (n > 0) {
        if (even(n % 10))
          ++evenCnt;
        else
          ++oddCnt;
        n /= 10;
    }
    System.out.println("even digits: " + evenCnt + " odd digits: " + oddCnt);
  }
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int number = sc.nextInt();
    numberOfEvenOdd(number);
  }
}

EDYCJA: Zedytowałem, bo trzeba jeszcze oddzielnie "załatwić" zero

1
lion137 napisał(a):

Owszem, tylko po co string?

import java.io.*;
import java.util.Scanner;
class Main {
  static boolean even(int n) {
    return n % 2 == 0;
  }
  static void numberOfEvenOdd(int n) {
    if (n == 0) {
      System.out.println("even digits: " + 1 + " odd digits: " + 0);
      return;
    }
    int evenCnt = 0;
    int oddCnt = 0;
    while (n > 0) {
        if (even(n % 10))
          ++evenCnt;
        else
          ++oddCnt;
        n /= 10;
    }
    System.out.println("even digits: " + evenCnt + " odd digits: " + oddCnt);
  }
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int number = sc.nextInt();
    numberOfEvenOdd(number);
  }
}

EDYCJA: Zedytowałem, bo trzeba jeszcze oddzielnie "załatwić" zero

No twój kod jest ... Po prostu dobry to mi się podoba w programowaniu tyle dróg do osiągnięcia celu . Rozwiązałem też ten problem w bardziej prymitywny sposób(rozwiązanie powyżej )ale to sobie zapisze w notatkch :P

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