Как зациклить алгоритм нахождения квадратного корня - 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;
}