Example #1
0
        public static LongNumber Task6(int k) // Задача номер СЕМЬ!
        {
            // Переменная для ответа.
            LongNumber a = new LongNumber("2");
            // Переменная для текущего результата.
            LongNumber q = new LongNumber("1");
            // Переменная для проверки точности.
            LongNumber w = new LongNumber("1");
            // "Длинная" единица для удобства.
            LongNumber x = new LongNumber("1");
            // Итерационная переменная.
            int i = 2;
            // Пременная для знака.
            int p = -1;

            // Пока не дошли до указанной точности и не вышли за границы int32.
            while ((a.GetExp() <= k * 2) && (i < int.MaxValue))
            {
                // Считаем.
                q.SetMaxExp(k);
                q.EqualTo(x / i);
                q.EqualTo(q * p);
                a.EqualTo(a + q);
                // Проверяем точность.
                w.EqualTo(a - w);
                int j = a.num.Count;
                if (a.GetExp() > k)
                {
                    while (j >= k)
                    {
                        if (w.num[j - 1] != 0)
                        {
                            break;
                        }
                        j--;
                    }
                    if (j <= k)
                    {
                        break;
                    }
                }
                // Сохраняем текущий результат.
                w.EqualTo(a);
                // Двигаем итерацию.
                i += 2;
                // Меняем знак.
                p *= -1;
            }
            a.EqualTo(a * 2);
            return(a);
        }