c - 实现 π (pi) 的 Spigot 算法

标签 c algorithm math spigot-algorithm

我很难理解找到 π (pi) 的 Spigot 算法 here在页面底部。

我在第 2 部分“将 A 放入常规形式”的底部迷路了,我不确定如何在 C(或任何其他语言)中实现它

最佳答案

  #include <math.h>
  #include <stdio.h>
  #define N 100

  int len = floor(10 * N/3) + 1;
  int A[len];

  for(int i = 0; i < len; ++i) {
    A[i] = 2;
  }

  int nines    = 0;
  int predigit = 0;

  for(int j = 1; j < N + 1; ++j) {        
    int q = 0;

    for(int i = len; i > 0; --i) {
      int x  = 10 * A[i-1] + q*i;
      A[i-1] = x % (2*i - 1);
      q = x / (2*i - 1);
    }

    A[0] = q%10;
    q    = q/10;

    if (9 == q) {
      ++nines;
    }
    else if (10 == q) {
      printf("%d", predigit + 1);

      for (int k = 0; k < nines; ++k) {
        printf("%d", 0);
      }
      predigit, nines = 0;
    }
    else {
      printf("%d", predigit);
      predigit = q;

      if (0 != nines) {    
        for (int k = 0; k < nines; ++k) {
          printf("%d", 9);
        }

        nines = 0;
      }
    }
  }
  printf("%d", predigit);

关于c - 实现 π (pi) 的 Spigot 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4084571/

相关文章:

python - IplImage 里面的 IplImage

objective-c - 插入排序 vs 冒泡排序 vs 快速排序算法

ios - iOS 滑动时使用的速度/加速度方程是什么?

java - 使用曼哈顿距离计算多点之间的最短路径

java - 如何将 double 转换为适合表示英寸的格式的分数?

Java 对数 log(num, base)(已关闭)

从其他线程调用 FD_SET,select 仍然阻塞

c - 如何找到 .wav 文件的数据(样本)大小?

c++ - Delphi 和 C/C++ DLL 结构与记录

algorithm - 两个整数的映射函数