Исправить функцию для подсчета большого факториала - C#

Узнай цену своей работы

Формулировка задачи:

Помогите написать функцию для подсчета большого факториала, вот код программы
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication40
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. Console.Clear();
  12. int c = 0;
  13. double y = 0;
  14. double x1 = 0;
  15. double x2 = 0;
  16. double dx = 0;
  17. double e = 0;
  18. double d = 0;
  19. double f = 0;
  20. int l = 0;
  21. bool u = true;
  22. double bufy = 0;
  23. bool o = true;
  24. while (o)
  25. {
  26. try
  27. {
  28. o = false;
  29. Console.Write("Введите х начальное ");
  30. x1 = Convert.ToDouble(Console.ReadLine());
  31. Console.Write("Введите х конечное ");
  32. x2 = Convert.ToDouble(Console.ReadLine());
  33. Console.Write("Введите шаг ");
  34. dx = Convert.ToDouble(Console.ReadLine());
  35. Console.Write("Введите точность ");
  36. e = Convert.ToDouble(Console.ReadLine());
  37. }
  38. catch
  39. {
  40. o = true;
  41. Console.Clear();
  42. Console.WriteLine("Ошибка ввода");
  43. }
  44. }
  45. Console.WriteLine("Таблица значений");
  46. Console.WriteLine("---------------------------");
  47. Console.WriteLine(" x | y | k ");
  48. Console.WriteLine("---------------------------");
  49. for (int i = 1; x1 <= x2; i++)
  50. {
  51. c = 0;
  52. l = 1;
  53. y = 0;
  54. d = 0;
  55. f = 0;
  56. u = true;
  57.  
  58. for (int n = 0; u; n++)
  59. {
  60. f = fac(n);
  61. bufy = (Math.Pow((-1), n) * (Math.Pow(x1, 2 * n))) / f;
  62. y = y + bufy;
  63. if (Math.Abs(bufy) < e) u = false;
  64. d = bufy;
  65. c++;
  66. //f = f * c;
  67. //l = l * -1;
  68. y = Math.Round(y, 7);
  69. // Console.WriteLine(" n={0}, fac={1}",n, fac(n));
  70.  
  71. }
  72. Console.Write("|{0,5} ", x1);
  73. Console.Write("|{0,13}|", y);
  74. Console.WriteLine(" {0,3}", c);
  75.  
  76. x1 = x1 + dx;
  77.  
  78. }
  79. Console.ReadLine();
  80. }
  81. private static double fac(int n)
  82. {
  83. if (n <= 1) return (1);
  84. else return (n * fac(n - 1));
  85. }
  86.  
  87. }
  88. }
А вот проверка максимального значения факториала max=170.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication51
  6. {
  7. class Program
  8. {
  9. private static double fac(int n)
  10. {
  11. if (n <= 1) return (1);
  12. else return (n * fac(n - 1));
  13. }
  14.  
  15. static void Main(string[] args)
  16. {
  17. Console.WriteLine("Введите n=");
  18. double p = double.Parse(Console.ReadLine());
  19. for (int n = 0; n < p; n++)
  20. {
  21. // if (n = false)
  22. // break;
  23. Console.WriteLine("n={0},fac={1}", n, fac(n));
  24. }
  25. Console.ReadLine();
  26. }
  27. }
  28. }
Я смог только до 170 дальше бесконечность но из за этого не работает ряд Тейлора как надо.

Решение задачи: «Исправить функцию для подсчета большого факториала»

textual
Листинг программы
  1. double current = 1;
  2. int n = 0;
  3. double sum = 1;
  4. int sign = 1;
  5. for (/*условие цикла*/)
  6. {
  7.    n++;
  8.    sign = -1 * sign;  //меняем знак
  9.    current = current * x * x; //домножаем на x^2
  10.    current = current / n;    //делим на номер счетчика(вот и весь факториал)
  11.    current = current * sign;
  12.    sum = sum + current;
  13. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы