实现π(pi)的Spigot算法

Dev*_*gay 9 c algorithm math spigot-algorithm

我有一个很难理解的承插算法发现π(圆周率)在此页面的底部.

我迷失在第2部分"将A放入常规形式"的底部,我不确定如何用C(或任何语言) 实现这一点

Ped*_*lva 9

  #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);
Run Code Online (Sandbox Code Playgroud)

  • 哦,你的意思是做`for(int i = 0 ...)`?我想,清理杂乱无章.在循环的实际范围之外没有临时初始化.从理论上讲,这应该确保索引变量在循环中有词法范围,但我想我在某处读到它们实际上仍然在循环之外. (2认同)