2014-12-04 3 views
0

Я пытаюсь вычислить итеративно, но мой код дает мне 2. Любая идея, что может быть неправильным? Потому что я полностью застрял.Вычисление e с использованием петель

public class iteratee { 

    public static void main(String[] args) { 

     long limit = 0; 

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

      limit = limit + 1/factorial(i); 

     } 

     System.out.println(limit); 

    } 

    static int factorial(int n) { 

     int factorial = 1; 

     for (int j = 1; j <= n; j++) { 
      factorial = factorial * j; 
     } 

     return factorial; 

    } 

} 
+4

'limit' (Я предполагаю, что« e ») является целым типом. Не может иметь десятичных точек в int. Переключитесь на 'double'. – markspace

ответ

5

long - тип, представляющий целочисленное значение; это не отразится на каких-либо десятичных знаках. Измените limit на тип double и напишите limit = limit + 1.0/factorial(i), что позволит избежать использования целочисленного деления.

+0

Кроме того, целочисленное деление не даст хорошего ответа. –

+0

Спасибо! Я не знал, что 1/factorial (i) дает округленное целое число. (0) – Jack

1

Изменить эту часть:

long limit = 0; 

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

     limit = limit + 1/factorial(i); 

    } 

в

double limit = 0; 

    for (int i = 0; i < 11; i++) { 
     limit = limit + 1.0/factorial(i); 
    } 

иметь double для limit и 1.0 вместо 1.

Смежные вопросы