Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 189
1

Класс для вычисления факториала до 20! Как задать условие

21.12.2017, 23:03. Показов 996. Ответов 11
Метки нет (Все метки)

Всем доброй ночи. Наступаю на те же грабли::
-Метод есть, условие присобачить не могу.

Как ввести: например вычислить факториал 7.

Ниже готовый класс с методом решения:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*Этот клас вычисляет факториал и кэширует результат в таблице для дальнейшего употребления
 *20!-самый большой факториал для типа Long 
 *поэтому должна быть проверка аргумента на величину с исключениями*/
 
 
public class Pr_1_7_factorial3 {
 
        static long [] table = new long [21]; /*Создаем массив для хранения фактор-в от0! до 20!
                                               Первая половина строки - обьявляет статическое поле table
                                               которая будет массивом значений типа long
                                               вторая поовина создает массив из 21 значения 
                                               при помощи оператора new...*/
        
        static {table [0]=1;}                 //Инициализируем первый элемент массива
                                              // !0=1
        static int last =0;                   //Запоминаем номер последнего вычисленного фактор-ла
        
        public static long factorial(int x) throws IllegalArgumentException {
                                             // Проверяем величину Х. Выдаем исключение  
            
            if (x>=table.length)             //length - возвращает длину любого массива
            throw new IllegalArgumentException ("Переполнение: Х слишком велик!!");
            if (x<table.length)         
            throw new IllegalArgumentException ( "Х должен быть больше 0!!");
            
            while (last < x) {
                table [last+1]=    table [last]*(last+1);      //Вычисляем и кэшируем все пока еще не сохраненные данные
                last ++;
            }
            
            
            return table[x] ;
            
    }
 
}
iSmokeJC, заранее спасибо
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2017, 23:03
Ответы с готовыми решениями:

Как задать условие для функции
Добрый вечер! Например есть double Psi(double x) Нужно чтобы функция возвращала x при 0\leq x \leq...

Как задать условие для кнопки?
&quot;Если поле в edittext пустое = button не активен(нельзя нажать)&quot;

Как задать условие для переменной?
Доброго дня уважаемые форумчане. Подскажите пожалуйста возможно ли задать условие наподобие If ssil...

Как задать условие выбора для EventTrigger?
Есть Image со стилем, который розмещен на `MyControl : UserControl`, в `MyControl` есть свойство...

11
Йуный падаван
Эксперт PythonЭксперт Java
7920 / 4446 / 1609
Регистрация: 21.10.2017
Сообщений: 12,395
21.12.2017, 23:33 2
Лучший ответ Сообщение было отмечено Сергей_СПб как решение

Решение

Ты мне льстишь..
Во-первых
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
if (x<table.length)
че за маразм? ставь (x < 1)
Ну и в методе main -
Java
1
System.out.println(Pr_1_7_factorial3.factorial(15));
Добавлено через 57 секунд
Ну, вместо 15 - что тебе надо...

Добавлено через 1 минуту
И класс переименуй как-нибудь поприличней, Fact хотя бы
1
3 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 189
22.12.2017, 09:43  [ТС] 3
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Ты мне льстишь..
Ты не понял, это было заклинание на удачу
перед охотой
0
1912 / 1527 / 376
Регистрация: 17.02.2014
Сообщений: 7,665
22.12.2017, 09:48 4
Сергей_СПб, чем вам BigInteger не мил?
0
3 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 189
22.12.2017, 13:06  [ТС] 5
Aviz__, Как раз разбираюсь с этой темой. Добью-выложу. Вдруг ещё кому понадобится
0
3 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 189
23.12.2017, 18:36  [ТС] 6
Цитата Сообщение от Aviz__ Посмотреть сообщение
чем вам BigInteger не мил?
А он прикольный
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.*;
import java.math.BigInteger;
 
public class Pr_1_7_factorial4 {
    
    
    protected static ArrayList table = new ArrayList(); //Создается кэш в oбьекте ArrayList
                                        //похож на массив, но может разрастаться до любого размера
    static {table.add(BigInteger.valueOf(1));}          // Создаем кэш, инициализируем первый элемент - 1
                                    
                             /* Метод factorial()  использующий обьекты  BigInteger,
                              * сохраняемые в ArrayList*/
    
    public static synchronized BigInteger factorial (int x) {
        if (x<1)            
            throw new IllegalArgumentException ( "Х должен быть больше 0!!");
    for(int size = table.size(); size<=x; size ++)
    {   
    BigInteger lastfact = (BigInteger)table.get(size-1);
    BigInteger nextfact = lastfact.multiply(BigInteger.valueOf(size));
    table.add(nextfact);
    }
        
    return (BigInteger) table.get(x);   
        
    }
    
 
    public static void main(String[] args) {
        for (int i=5; i<=50; i++)
            System.out.println (i+"!="+ factorial(i));
        
    }
    
    
 
}
И даже понятный
0
Йуный падаван
Эксперт PythonЭксперт Java
7920 / 4446 / 1609
Регистрация: 21.10.2017
Сообщений: 12,395
23.12.2017, 18:42 7
Java
1
System.out.printf("! %d = %d\n", i, factorial(i));
0
3 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 189
23.12.2017, 18:46  [ТС] 8
Цитата Сообщение от iSmokeJC Посмотреть сообщение
printf("! %d = %d\n"
Я так понял что это тоже самое, только для любителей С++
0
Йуный падаван
Эксперт PythonЭксперт Java
7920 / 4446 / 1609
Регистрация: 21.10.2017
Сообщений: 12,395
23.12.2017, 18:48 9
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
только для любителей С++
отнюдь!
0
3 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 189
23.12.2017, 19:10  [ТС] 10
iSmokeJC, , главное разобрался как это называется, то что я все допытывался

- протестировать программу
0
Йуный падаван
Эксперт PythonЭксперт Java
7920 / 4446 / 1609
Регистрация: 21.10.2017
Сообщений: 12,395
23.12.2017, 19:17 11
Цитата Сообщение от Сергей_СПб Посмотреть сообщение
протестировать программу
0
3 / 3 / 1
Регистрация: 13.12.2017
Сообщений: 189
23.12.2017, 19:22  [ТС] 12
Вопрос примерно звучал так:
Есть какой-нибуть общий принцип разделения файла с условием и файлом с самой функцией.
Где почитать, или как правильно сформулировать??
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.12.2017, 19:22

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как задать начальное условие для переменной-массива в NMinimize?
Уважаемые участники форума! Решаю многомерную задачу оптимизации и хочу передать в NMinimize в...

Как задать условие для подсчета суммы элементов массива с парным индексом
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; int main() { int a,b,c; printf(&quot;vvedit a:&quot;); ...

Функция для вычисления факториала
определить функцию вычисления факториала числа. Рассчитать с помощью нее: 2x5! + 3x9! \ 7! +10!...

Цикл для вычисления факториала
Подскажите написать цыкл для вычисления факториала с основанием не четных чисел. Пример через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.