⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bbppi.c

📁 本题的算法中涉及的三个函数: double bbp(int n,int k,int l) 其中n为十六进制位第n位
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>


double bbp(int n,int k,int l)
{
 int i;
 long b=1;
 double c=1;
 if(n>k)
 {
  for(i=n-k;i!=0;i--)
   b=(b*16+0)%(8*k+l);
  return(((double)b)/((double)(8*k+l)));
 }
 else
  if(n==k)
   return(((double)1)/((double)(8*k+l)));
  else 
  {
   for(i=0;i<(k-n);i++)
    c=c/16;
   return(c/(8*k+l));
  }
}
void pi(int m,int n,int p[])
{
    double a=0;
 int k=0;
 while(k<(n+8))
 {
  a+=4+4*bbp(n,k,1)-2*bbp(n,k,4)-bbp(n,k,5)-bbp(n,k,6);
  a=a-(int)a;
  k++;
 }
    for(k=0;k<m;k++)
 {
  a*=16;
  p[k]=(int)a;
  a=a-(int)a;
 }
}
void ddiv(int p[])
{
 int i,j=0;
 for(i=0;i<300;i++)
 {
  p[i]=j*10000+p[i];
  j=p[i]%2;
  p[i]=p[i]/2;
 }
}


void add(int a[],int b[])
{
 int i,j=0;
 for(i=299;i>=0;i--)
 {
  a[i]=a[i]+b[i]+j;
  if(a[i]>=10000)
  {
   a[i]-=10000;
   j=1;
  }
  else
   j=0;
 }
}

int main(int argc, char *argv[])
{
 int i,j,p[1100]={0},r[300]={0};
 short q[4000];
 for(i=0;i<125;i++)
  pi(8,i*8,p+i*8);
 for(i=0;i<1000;i++)
 {
  j=p[i];
  q[i*4+3]=j%2;
  j=j/2;
  q[i*4+2]=j%2;
  j=j/2;
  q[i*4+1]=j%2;
  j=j/2;
  q[i*4+0]=j%2;
  p[i]=0;
 }
 p[0]=10000;
 for(i=0;i<4000;i++)
 {
  ddiv(p);
  if(q[i]) add(r,p);
 }

 printf("3.");
 for(i=0;i<250;i++)
 {
  if(r[i]<10)

   printf("000");
  else if(r[i]<100)

    printf("00");
  else if(r[i]<1000)

      printf("0");

  printf("%d",r[i]);
  
 }

 printf("\n");
 
  system("PAUSE");	
  return 0;
}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -