Как зациклить алгоритм нахождения квадратного корня - C#
Формулировка задачи:
пишу метод нахождения квадратного корня, всё вроде работает, алгоритм верный, НО не могу зациклить его, нужна помощь или дельный совет
Листинг программы
- public int Sqrt(long x)
- {
- long b = 0;
- long a = x;
- List<int> num = new List<int>();
- for (int i = 0; i <= x; i++)
- {
- b = a % 100;
- if (b == 0)
- break;
- num.Add((int)b);
- a /= 100;
- }
- List<int> otv = new List<int>();
- for (int j = 1; j <= 9; j++)
- {
- if (Quadro(j, 2) == num[num.Count - 1])
- {
- otv.Add(j);
- break;
- }
- if (Quadro(j, 2) > num[num.Count - 1])
- {
- otv.Add(j - 1);
- break;
- }
- }
- //с этого момента не могу зациклиться
- num[num.Count - 2] = num[num.Count - 2] + ((num[num.Count - 1] - (otv[0] * otv[0])) * 100);
- for (int k = 1; k <= 9; k++)
- {
- if (((((otv[0] * 2) * 10) + k) * k) == num[num.Count - 2])
- {
- otv.Add(k);
- break;
- }
- if (((((otv[0] * 2) * 10) + k) * k) >= num[num.Count - 2])
- {
- otv.Add(k - 1);
- break;
- }
- }
- return (int)x;
- }
Решение задачи: «Как зациклить алгоритм нахождения квадратного корня»
textual
Листинг программы
- /// <summary>
- /// Нахождение корня n-ой степени методом Ньютона
- /// </summary>
- /// <param name="A">Число, из которого требуется вычислить корень</param>
- /// <param name="n">Степень корня</param>
- /// <param name="eps">Точность вычислений</param>
- /// <returns>Значение корня</returns>
- public static double SqrtN(double A, int n, double eps)
- {
- double x1 = 0, x2 = 2;
- do
- {
- x1 = x2;
- x2 = (x1 * (n - 1) + A / Math.Pow(x1, n - 1)) / n;
- } while (Math.Abs(x1 - x2) > eps);
- return x2;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д