2015-10-26 5 views
-1

Я пытаюсь написать программу, которая принимает целое число от пользователя, тогда он должен рассчитать эту серию S = 1/2! - 1/3! + 1/4! - 1/5! + .... до 1/x! где х является целым числом принимается от пользователя, я уже писал этот код, чтобы вычислить факториал х:Вычисление серии

import java.util.Scanner; 
public class Factorial { 

    public static void main(String args[]){ 

     Scanner x = new Scanner(System.in); 
     System.out.println("Enter a number: "); 
     int number = x.nextInt(); 
     int fact = 1; 


     for (int i = 1; i <= number; i++){ 
      fact = fact*i; 

     } 

     System.out.println("The factorial of "+number+" is "+fact); 
     x.close(); 
    } 

} 

, но до сих пор не уверен, как код серии, любые советы будут действительно оценили.

Кроме того, я прошу прощения, если мой код не организован, я не знаю, как использовать StackOverflow инструменты;. (

+1

Вы на правильном пути. Одним из шагов было бы создать функцию, называемую factorial, которая принимает целое число в качестве аргумента. Затем создайте еще одну функцию, серию, которая также принимает аргумент int. Вам понадобится цикл внутри серии, который вызывает факториал. После того, как вы кодируете серии и факториал, мы можем вам помочь, особенно если вы скажете нам, что вы ожидали, и что вы получаете вместо этого. – rajah9

+2

Обратите внимание, что 'int' не может содержать более 12! – aioobe

ответ

2

В идеале, вы хотите отделить свой код от нескольких функций и логически мыслить.

Поскольку вы сказали, что не хотите советов, я попробую поставить вас на правильный путь.


Подсказка 1:

Отдельный код на несколько функций

например.

public static int factorial(int n){ 
    int fact = 1; 

    for (int i = 1; i <= n; i++){ 
     fact = fact*i; 

    } 
    return fact; 
} 

Это позволяет разбить код на управляемые куски. Вызовите каждый кусок в соответствующее время. Это делает ваш код легче читать и более многоразовый


Подсказка 2:

Один главный класс, а другой класс с функциями.

В идеале вы хотите создать два класса, один из которых принимает входные данные от пользователя и тот, который содержит все необходимые функции.Основной класс принимает входные данные создаст объект другого класса

public class Factorial{ 
    public static void main(String args[]){ 

    Scanner x = new Scanner(System.in); 
    System.out.println("Enter a number: "); 
    int number = x.nextInt(); 
    Series s=new Series(number); 
    s.print(); 
    x.close(); 
} 

И в Series.java

public class Series{ 
    int output; 
    int input; 

    Series(int i){ 
     input=i; 
     //..here you calculate output 
    } 
    public int factorial(int n){ 
     //.... the code 
    } 

    public void print(){ 
    System.out.println("The calculation of " + input + " is " + output); 
    } 


} 

Совет 3:

сделать хороший простая функция для вычисления выхода. Суммируем все факториалы со временем

for (int i = 2; i <= input; i++) { 
     //if its even 
     if(i%2==0) 
      output = output + 1.0/factorial(i); 
     else 
      output = output - 1.0/factorial(i); 
} 

Добавьте следующие строки в конструкторе, и вы будете иметь хорошо встроенную программу Java


Совет 4:: Эти суммы будут десятичные , а не целые числа, поэтому вам необходимо заменить все ваши int s на double s

0

Во-первых, вы должны вычислить сумму слагаемых Стандартная модель, как

.
double sum = 0; 
for (int i = first; i <= last; i++) { 
    sum += term(i); 
} 

затем заметить, что

  1. первый член член (2) = +1/2!
  2. второй член является термом (3) = -1/3! = -term (2)/3
  3. Третий срок: +1/4! = Термы (3)/4
  4. т.д.

Таким образом, вы заметите, что каждый член может быть легко получен из предыдущей.

Это приводит к

double sum = 0; 
double term = (some value); 
for (int i = first; i <= last; i++) { 
    term = (some expression involving i and previous term); 
    sum += term; 
} 

упражнения слева, как, да, упражнение?