2013-11-23 2 views
0

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

public static void factors(int n) { 
    int r = 1; //starts r as zero, as a basis for multiplication 
    int t = n; 
    int q;  //allows original number to be shown 
    while(n > 1) { // factorial calculation 
     r= r * n;  
     n = n- 1; 
    } 
    while(t>0) { 
     table(t,r); 
     t=t-1; 
    } 
} 

public static void table(int t, int r){ 
// while(n>0) 
    System.out.println(t+ "\t"+r); 
// n=n-1; 

} 

И вот выход.

15 1409286144 
14 1409286144 
13 1409286144 
12 1409286144 
11 1409286144 
10 1409286144 
9 1409286144 
8 1409286144 
7 1409286144 
6 1409286144 
5 1409286144 
4 1409286144 
3 1409286144 
2 1409286144 
1 1409286144 
+1

А что вы ожидаете получить? В вашем коде вы уменьшаете 't' в цикле, оставляя константу' r', и печатаете полученный кортеж, разделенный символом табуляции. – alko

+0

@alko Я хочу получить факториалы каждого числа. –

+0

ник, когда вы вызываете 'table', вы всегда вызываете его с тем же' r'. Почему вы ожидаете получить разные 'r' в результате? Компьютеры не могут читать ваши мысли, они только делают то, что говорит код. – tucuxi

ответ

2

Начинать с получения одного факториала, а затем беспокоиться о таблице.

Имена имеют значение: «факторы» не являются хорошим именем для факториала.

Вот наивные, очень неэффективен реализация:

public class Factorial { 

    private static Map<Integer, Long> memo = new ConcurrentHashMap<Integer, Long>(); 

    public static void main(String[] args) { 
     for (int i = 0; i < 11; ++i) { 
      System.out.println(String.format("n: %d n!: %d", i, factorial(i))); 
     } 
    } 
    public static long factorial(int n) { 
     long value = 1L; 
     if (n > 1) { 
      if (memo.containsKey(n)) { 
       value = memo.get(n); 
      } else { 
       for (int i = 1; i <= n; ++i) { 
        value *= i; 
       } 
       memo.put(n, value); 
      } 
     } 
     return value; 
    } 
} 
Смежные вопросы