Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. #include <iostream> // подключение библиотеки
  2.  
  3. void Pi(int n) // объявление функции
  4. {
  5.     int length = 10 * n / 3 + 1, cnt_9 = 0; // объявление переменных
  6.     // length необходимая длина временного массива
  7.     // cnt_9 счетчик 9-ок
  8.     int dgt = 0, *data;
  9.     data = new int[length]; // создание временного массива
  10.     for (int i = 0; i < length; i++) // заполнение массива 2-ками
  11.         data[i] = 2;
  12.  
  13.     for (int j = 0; j <= n + 1; j++) // запуск цикла, зависящего от необходимого количества цифр
  14.     {
  15.         int tmp = 0;
  16.         for (int i = length; i > 0; i--) // запуск цикла в обратную сторону
  17.         {
  18.             int x  = 10 * data[i-1] + tmp*i; // формулы
  19.             data[i-1] = x % (2*i - 1);
  20.             tmp = x / (2*i - 1);
  21.         }
  22.         data[0] = tmp % 10;
  23.         tmp /= 10;
  24.  
  25.         if (tmp == 9) cnt_9++; // увеличение счетчика
  26.         else if (tmp == 10) // если цифра оказалась равной 10
  27.         {
  28.             std::cout << dgt + 1; // вывод цифры на 1 больше
  29.             for (int i = 0; i < cnt_9; i++) // выводим 0
  30.                 std::cout << 0;
  31.             dgt = 0;
  32.             cnt_9 = 0;
  33.         }
  34.         else
  35.         {
  36.             if (j != 0) //вывод очередной цифры, кроме первой
  37.                 std::cout << dgt;
  38.             dgt = tmp;
  39.             if (cnt_9 != 0) // вывод 9-ок
  40.                 for (int i = 0; i < cnt_9; i++)
  41.                     std::cout << 9;
  42.             cnt_9 = 0;
  43.         }
  44.         if (j == 1) std::cout << ","; // для красивого вывода
  45.     }
  46.     std::cout << dgt; // вывод последней цифры
  47. }
  48.  
  49. int main()
  50. {
  51.     std::cout << "pi = ";
  52.     Pi(1000); // запуск функции
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement