Прайм-фактор печати по определенной схеме - PullRequest
1 голос
/ 05 февраля 2020

Я должен напечатать множитель любого числа в этом формате. Пример: 32 = 2 * 2 * 2 * 2 * 2 Вот мой код. Он отлично работает для всех, кроме 32, он дает: 2 * 2 * 2 * 2 * 2 * Как избежать последнего *. Вот мой код: publi c класс PF {

public static void pf(int n) {

    for(int i = 2; i< n; i++) {
         while(n%i == 0) {
            System.out.print(i+ "*");
            n = n/i;
         }
    }

    if (n > 2) System.out.print(n); 
}

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a number");
    int n = sc.nextInt();
    pf(n);
}

Ответы [ 4 ]

2 голосов
/ 05 февраля 2020

Другой вариант, вы можете избежать * когда n = i, пока l oop

public static void pf(int n) {

    for (int i = 2; i < n; i++) {
        while (n % i == 0) {
            System.out.print(i);
            if (n != i) {
                System.out.print("*");
            }
            n = n / i;
        }
    }


    if (n > 2)
        System.out.print(n);
}
1 голос
/ 05 февраля 2020

Один из вариантов - сохранить значения в списке и распечатать их вместе следующим образом:

public static void pf(int n) {

    List<String> l = new ArrayList<>();

    for (int i = 2; i < n; i++) {
        while (n % i == 0) {
            l.add(String.valueOf(i));
            n = n / i;
        }
    }

    System.out.print(String.join("*", l));

    if (n > 2) {
        System.out.print("*" + n);
    }        
}
0 голосов
/ 05 февраля 2020

У вас проблема с форматированием. Имеет смысл отделить его от первоначального расчета; Лучше разбираться с разными проблемами по отдельности.

Вы можете сгенерировать список простых факторов и написать метод для печати списка в правильном формате. Для этой общей проблемы я склонен рассматривать список как заголовок с одним элементом, которому не предшествует разделитель, а хвостом - все остальные записи, каждой из которых предшествует разделитель, ваша '*' или, возможно, запятая в более распространенный случай. Вместо того, чтобы подавлять разделитель после последней записи в списке, думайте о нем, как о подавлении разделителя перед первой записью. Первый элемент в списке легче идентифицировать, чем последний.

Мой код не является строгим Java, но дает общее представление.

void printSeparatedList(factorList) {
  char separator = '*';
  bool firstEntry = true;

  for (int factor : factorList) {
    if (firstEntry) {
      firstEntry = false;
    } else {
      System.out.print(separator);
    }
    System.out.print(factor);
  }
} // End printSeparatedList
0 голосов
/ 05 февраля 2020

Я сделал это двумя способами.

Тип 1

public static void pf(int n) {

    for(int i = 2; i< n; i++) {
        while(n%i == 0) {
            System.out.print(i+ "*");
            n = n/i;
            System.out.print(i>n ? "\b" : "");  //Backspase and remove unwanted character(*) after print
        }
    }

    if (n > 2) System.out.print(n);
}

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a number");
    int n = sc.nextInt();
    pf(n);
}

Тип 2

public static void pf(int n) {

    for(int i = 2; i< n; i++) {
        while(n%i == 0) {
            System.out.print(i+ ((i<n) ? "*" : "")); //Skip the unwanted character(*)
            n = n/i;
        }
    }

    if (n > 2) System.out.print(n);
}

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a number");
    int n = sc.nextInt();
    pf(n);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...