fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. static const int digits = 305;
  5.  
  6. std::vector<char> divide(int nomin, int denom) {
  7. std::vector<char> num(digits,0);
  8.  
  9. for (int i = 0; i < digits && nomin; i++) {
  10. if (nomin < denom) {
  11. num[i] = 0;
  12. } else {
  13. num[i] = nomin/denom;
  14. nomin %= denom;
  15. }
  16.  
  17. nomin *= 10;
  18. }
  19.  
  20. return num;
  21. }
  22.  
  23. std::vector<char> summ(std::vector<char> a, std::vector<char> b) {
  24. std::vector<char> res(digits, 0);
  25. for (int i = digits-1; i >= 0; i--) {
  26. res[i] += a[i] + b[i];
  27. if (res[i] > 9) {
  28. res[i] -= 10;
  29. if (i > 0) res[i-1]++;
  30. }
  31. }
  32.  
  33. return res;
  34. }
  35.  
  36. std::vector<char> neg(std::vector<char> a, std::vector<char> b) {
  37. std::vector<char> res(digits, 0);
  38. for (int i = digits-1; i >= 0; i--) {
  39. res[i] += a[i] - b[i];
  40. if (res[i] < 0) {
  41. res[i] += 10;
  42. if (i > 0) res[i-1]--;
  43. }
  44. }
  45.  
  46. return res;
  47. }
  48.  
  49.  
  50. void print_num(std::vector<char> num) {
  51. std::cout << int(num[0]) << '.';
  52.  
  53. for (int i = 1; i < digits; i++)
  54. std::cout << int(num[i]);
  55.  
  56. std::cout << std::endl;
  57. }
  58.  
  59. std::vector<char> divideBy2_times(std::vector<char> nomin, int times) {
  60. std::vector<char> res = nomin;
  61. for (int t = 0; t < times; t++) {
  62. for (int i{}; i < digits; i++) {
  63. if(i < digits - 1 && res[i] % 2) res[i+1] += 10;
  64. res[i] /= 2;
  65. }
  66. }
  67.  
  68. return res;
  69. }
  70.  
  71. int main() {
  72. std::vector<char> pi(digits, 0);
  73. for(int i = 0; i < 275; i++) {
  74. std::vector<char> mem = divide(4, 8*i + 1);
  75. mem = neg(mem, divide(2, 8*i + 4));
  76. mem = neg(mem, divide(1, 8*i + 5));
  77. mem = neg(mem, divide(1, 8*i + 6));
  78. mem = divideBy2_times(mem, i * 4);
  79. pi = summ(pi, mem);
  80. }
  81.  
  82. print_num(pi);
  83. return 0;
  84. }
Success #stdin #stdout 0.32s 3464KB
stdin
Standard input is empty
stdout
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737123