Member 11242836 Ответов: 3

Как печатать факторные ряды в C#?


Как напечатать следующую последовательность факториал в C#...
1!+2!+3!+4!.....
и
1/1!+1/2!+1/3!+1/4!....

Пожалуйста, помогите..

/\jmot

Не ясно?
быть более конкретным..

Shanish K

Вы должны напечатать только серию, или результат также? Не могли бы Вы уточнить, каким должен быть результат?

_Maxxx_

Ожидается, что вы сделаете некоторую попытку, прежде чем просить людей помочь вам сделать домашнее задание

syed shanu

Google может дать вам лучший ответ.Множество доступных образцов их

Member 11242836

Я поискал в гугле.. n предпринимал попытки...
Я не прошу вас всех делать мою домашнюю работу... Я не могу понять этого, так что спрашивай...
@syed shanu и @_Maxxx_

Member 11242836

Я тоже хотел получить результат...результат должен быть суммой этих факториалов
Thnk u

Ankur\m/

Домашнее задание?
Напишите метод, который вычисляет факториал заданного числа. Это самое главное. Следующий шаг-найти значение данного выражения. Если это просто вычисление факториала 4 раза, вызовите метод 4 раза. Если это какой-то ряд, напишите другой метод, где вы будете передавать 'n', где n-это число, до которого будет вычисляться факториал. В этом методе вы будете вызывать первый метод, который вы написали n раз.
Ты должен начать первым.

Member 11242836

Я хотел получить сумму этих факториалов.
например, 1!+2! = 3.
так до тех пор, пока значение не задано пользователем..Мне нужна сумма до этого..

Member 11242836

ох...спасибо.. у меня есть u nw...
Я уже сделал, как получить факториал данного номера. bt я не получал эту серию...
Thnk u...

Raul Iloc

Я только что обновил свое решение, чтобы вычислить и "распечатать" также значения обоих выражений.

Ankur\m/

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

Member 11242836

я...вами.. :)

Raul Iloc

Я не согласен с вами, что вы должны вызывать факторный метод "n" раз для ряда-это оптимальное решение. Посмотрите на мое решение ниже, и вы увидите оптимальное решение, которое выполняет вычисление всех рядов в одном цикле.

syed shanu

Проверьте мое решение, надеюсь, вы получите то, что хотите сейчас.

Raul Iloc

1.Вы видели обновление в моем решении?
2.Теперь я также вычисляю каждый ряд в одном цикле, это гораздо оптимальное решение, которое принимается вами, потому что каждый факториал зависит от предыдущего значения ("n! = n * (n-1)!"), поэтому вызов процедуры "n" раз не является оптимальным решением!

Ankur\m/

Нет, это не так. Для каждой серии, связанной с факториалом, вы собираетесь написать новый код? Вы все сделали в рамках одного метода. Я предложил то же самое, чтобы их разделили. Время, затраченное на расчет в обеих методиках, будет одинаковым.

Ankur\m/

Хорошо, в этом конкретном сценарии код может быть дополнительно оптимизирован путем умножения текущего числа на последний найденный факториал. Но я думаю, что время, затраченное на расчет в обоих методах, будет одинаковым, если только это не будет сделано для очень высокого значения n. Я сделаю тест и опубликую результаты.

Andreas Gieriet

Я удивляюсь, что никто (или я пропустил это) не упомянул, что первая серия легко и быстро достигает предела диапазона целочисленных значений ваших переменных. В зависимости от выбранного типа переменной, вы достигнете предела с n = 13 или n = 20.
Вторая серия приводит к тому, что e - чем больше терминов вы добавляете, тем ближе оно становится к реальной стоимости товара. e = 2.718281828...
Овации
Энди

3 Ответов

Рейтинг:
7

syed shanu

Проверьте этот код, надеюсь, это вам поможет.

//The fucntion can be called in page load or in button click or as you like.
 protected void Page_Load(object sender, EventArgs e)
    {
       // Call your fucntion here and pass your input to this method
        String Factorials = YourFactorial(3);
    }

 public String YourFactorial(int n)
    {

        if (n <= 1)
        {
            return " 1! :" + " The result is : 1" ;
        }

        int result = 1;

        String results = "";
        results = "1! + ";
        for (int i = 2; i <= n; i++)
        {
            results =results + i.ToString()+" ! + ";
            result = result * i;

        }

        return results + " The result is :" + result;

    }


Member 11242836

Thnk u...

Ankur\m/

Я уже описал эту технику в своем ответе. Пусть попробует. То, что ты пишешь для него код, ему не поможет.

syed shanu

Привет,
Ну вы можете увидеть мой комментарий для him.as он снова попросил решение которое я сделал для него это очень простое решение для нас но для стартера оно кажется трудным

Ankur\m/

И то, что ты пишешь для него код, не заставит его учиться. Пусть попробует показать, что он сделал и где застрял. Тогда вы могли бы помочь ему в этом.

syed shanu

Круто

Ankur\m/

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

syed shanu

Ой, у него есть как целое число, так и строка, которую пользователь может использовать, как он хочет.

Рейтинг:
27

Ankur\m/

Напишите метод, который вычисляет факториал заданного числа. Это самое главное. Следующий шаг-найти значение данного выражения. Если это просто вычисление факториала 4 раза, вызовите метод 4 раза. Если это какой-то ряд, напишите другой метод, где вы будете передавать 'n', где n-это число, до которого будет вычисляться факториал. В этом методе вы будете вызывать первый метод, который вы написали n раз, используя цикл (while / for).
Ты должен начать первым.


Raul Iloc

Я не согласен с вами, что вы должны вызывать факторный метод "n" раз для ряда-это оптимальное решение. Посмотрите на мое решение выше, и вы увидите оптимальное решение, которое выполняет вычисление всех рядов в одном цикле.

Ankur\m/

Ваше решение не является "многоразовым". Принцип многократного использования гласит, что вы должны создавать методы для многократно используемых кодов.
Код для поиска факториала будет таким же. Таким образом, вы можете создать метод для него, и вам не нужно писать его каждый раз, когда дается новый тип выражения.

Raul Iloc

Это совсем не так! Весь мой код для каждой серии может быть помещен в один метод, который должен иметь один параметр "n".

Ankur\m/

Именно это я и предложил. Первое, что я сказал, - это создать метод вычисления факториала числа. И тогда в зависимости от выражения, следующий подход должен быть решен.

Raul Iloc

Нет, я предлагаю использовать только один метод для вычисления всего ряда и не использовать метод "n" раз для каждого факториала!

Ankur\m/

Я провел несколько тестов, и, как я уже сказал, ваш метод вычислений быстрее. Но это заметно при очень высоких значениях n.
В любом случае мой ответ был предложением о том, как приступить к решению проблемы. Я никогда не писал никакого кода и оставил это для пользователя. Как только он смог написать решение, оптимизация стала бы следующим шагом. Я уверен, что есть и другие более быстрые методы вычислений, чем те, которые вы предложили. Уровень оптимизации зависит от типа создаваемого приложения.

Вы были слишком быстры, чтобы проголосовать за ответ, и я думаю, что ответ не заслуживает отрицательного голосования (причины, упомянутые выше).

Рейтинг:
20

Raul Iloc

1.Для первого выражения вы должны сделать то же самое, что и в следующем примере:

int n = 10;
            StringBuilder builder = new StringBuilder();
            double resultValue = 0;
            double temp = 1;
            for (int i = 0; i < n; i++)
            {
                if (i > 0)
                    builder.Append(" + ");
                builder.Append(string.Format("{0}!", i + 1));
                temp *= (i + 1);
                resultValue += temp;
            }
            //
            builder.Append(string.Format(" = {0}", resultValue));
            _textBox.Text = builder.ToString();


2.для 2-го выражения аналогичный код, как показано ниже:
int n = 10;
            StringBuilder builder = new StringBuilder();
            double resultValue = 0;
            double temp = 1;
            for (int i = 0; i < n; i++)
            {
                if (i > 0)
                    builder.Append(" + ");
                builder.Append(string.Format("1/{0}!", i + 1));
                temp *= (i + 1);
                resultValue += 1/temp;
            }
            //
            builder.Append(string.Format(" = {0}", Math.Round(resultValue, 2)));
            _textBox.Text = builder.ToString();


Ankur\m/

Ему нужно вычислить факториал для данного ряда. Ему не нужно создавать "строку". Я могу быть уверен в этом, потому что он ответил на мой комментарий, где я предложил ему, как это сделать.

Raul Iloc

Из него исходил оригинальный вопрос, который он задал о печати этого факториала, во всяком случае, я обновил свое решение, чтобы также вычислить оба ряда.

Member 11242836

Thnk u...

Raul Iloc

Добро пожаловать!