JavaRush
AI Academy
new
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Все работает, но не проходит валидацию. Помогите найти пр...
Денис
41 уровень
  • 28.03.2020
  • 542просмотров
  • 8комментариев

Все работает, но не проходит валидацию. Помогите найти проблему

Вопрос по задаче Факториал
Java Core,  5 уровень,  12 лекция
Решен


Напиши метод, который вычисляет факториал - произведение всех чисел от 1 до введенного числа, включая его.

Пример вычислений: 4! = factorial(4) = 1*2*3*4
Пример вывода: 24

Для этого:

  1. Введи с консоли число меньше либо равно 150.
  2. Реализуй функцию factorial.
  3. Если введенное число меньше 0, выведи 0.
0! = 1

Требования:
  • Программа должна считывать данные с клавиатуры.
  • Программа должна выводить на экран факториал введенного числа.
  • Метод factorial должен возвращать строковое представление факториала числа, переданного ему в качестве параметра.
  • Метод factorial должен принимать один параметр типа int.
....
package com.javarush.task.task15.task1531; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.math.BigInteger; /* Факториал */ public class Solution { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int input = Integer.parseInt(reader.readLine()); reader.close(); System.out.println(factorial(input)); } public static String factorial(int n) { double result = 1; if (n >= 0) { for (int i = 1; i <= n; i++) { result = result * i; } } else result = 0; return String.valueOf((BigInteger.valueOf((long) result))); } }
0
Комментарии (8)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Денис Java Developer
31 марта 2020, 10:41
BigInteger result
0
Денис Java Developer
31 марта 2020, 10:39
if (n >= 0) { for (int i = 1; i <= n; i++) { result = result.multiply(BigInteger.valueOf(i)); } } else result = BigInteger.valueOf(0);
0
Не ну это не серьезно
Уровень 31
Expert
29 марта 2020, 21:46
У меня точно такое же решение и тоже не принимает. Значения сравнивал, само собой. Вроде бы все правильно, тоже через double (long не потянет даже 40ка, в минут несколько раз уйдет). Вроде бы выдает все правильно, но не пропускает.. хз чего. Не знаю почему этот вопрос "Решен".. где?
0
Ksenia VolkovaJava Developer в DXCMaster
30 марта 2020, 08:15
Какой у тебя результат, например, для 30! и 40! ?
0
Не ну это не серьезно
Уровень 31
Expert
30 марта 2020, 09:19
Да я понял, что валидатор не хочет принимать тип dobule и надо использовать BigInteger. Однако это не говорит, что результат не правильный, он просто в другой форме. Через x*10(в степени). По таблице 30!: 265252859812191058636308480000000 (2,65*10(в 32 степени)) Через дабл: 2.6525285981219103E32 Результаты разные? Нет, первой число == второму. То, что они в другом виде - да, это правда. Хотя у человека немного другой код.. у меня
public static String factorial(int n) {
        String result = "0";
        if (n >= 0) {
            double res = 1d;
            for (int i = 1; i <= n; i++) {
                res = res * i;
            }
            result = String.valueOf(res);
        }

        return result;
0
Ksenia VolkovaJava Developer в DXCMaster
30 марта 2020, 09:38
265252859812191058636308480000000 и 2.6525285981219103E32 - совсем не одно и то же, посмотри внимательно. У double идет существенная потеря точности. Из 26 значимых цифр (не нулей) в double осталось 17 (и то не точных).
0
Денис Java Developer
28 марта 2020, 17:38
спасибо, понял
0
Ksenia VolkovaJava Developer в DXCMaster
28 марта 2020, 17:36
Попробуй ввести в свою программу несколько чисел больше 20 и сравнить результаты. (И вот тебе таблица факториалов для проверки).
+1
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush