C语言编程求圆周率

做到一道题目,要求计算圆周率第“100万”位。代码不能超过4KB的长度,不能用直接输出那一百万个数。也不能用无穷级数,那貌似太慢了,我只能用最多10S。

自己弄到个代码,可是精度不能确定,而且我的确没弄懂该程序的原理。
贴上:#include "stdio.h"
long long a =10000000,b,c =28000,d,e,f[78019909],g,flag=0;
main() {freopen("play.out","w",stdout);
long long i;
for (i = 0 ;i < c;i ++ )
f[i] = a / 5 ;
while (c != 0 )
{
d = 0 ;
g = c * 2 ;
b = c;
while ( 1 )
{
d = d + f[b] * a;
g -- ;
f[b] = d % g;
d = d / g;
g -- ;
b -- ;
if (b == 0 ) break ;
d = d * b;
}
c=c-3;
if(flag<1){printf("3.141");flag=4;}
if(flag>=4){printf( "%.4d" ,e + d / a);
flag=flag+7;}
if(flag>=10000){printf("\n %ld ",flag);return(0);}
e = d % a;
}

}

望神人解答,能让以上代码实现100万的输出并解释清楚。
若能自己写新的代码并解释清楚也可以。
谢谢

用的是如图的公式,下面是arctg展开的级数。

这个输出没有写好,一组是10位,如果前面是“0”就会少了,要完善一下。

N是定义 ç®—多少组的,N=1000 æ—¶ N*10就是10000组,要算到100万位这种算法要好长时间,但是这是最简单的算法之一。

下面分成三个部分,第一是定义数组和

#define N 1000

#include  "math.h"

#include "string.h"

main()

{

auto double a1,b1,b2,c1,d,i=1.0,q=-1.0;

auto double n,g,r=10000000000.0;

static double a[N+1],b[N+1],c[N+1];

auto char *str3,str1[15],strs1[11*N],*p_strs1;

auto long p,j,k=1,m=1;

do {

 printf("input p= ");

 scanf("%ld",&p);

} while(p<=0 && p>100);

p = p + 1;

b[1]=r*20.0,c[1]=239*r;

do

{ q=-q,a1=0,b1=0,c1=0;

     for(j=m;j<=p;j++){c1=c[j]+c1*r,c[j]=floor(c1/57121),c1=c1-c[j]*57121;}

 if (c[m]<1e-5) m++;

 for(j=k;j<=p;j++){

  a1=b[j]+a1*r,b[j]=floor(a1/25.0),a1=a1-b[j]*25.0;

  d=b1*r+b[j]-c[j],b1=floor(d/i),a[j]=4*q*b1+a[j];

  b1=d-b1*i;

     }

 if (b[k]<=1e-5) {

  k++ ;

  printf("k=%ld ",k);}

 i = i + 2;

}while(m<=p);

do

{ q = -q, a1 = 0,b1 = 0;

 for(j=k;j<=p;j++) {

  a1=b[j]+a1*r,b2=floor(a1/25),b[j]=b2;

  a1=a1-b2*25,d=b2+b1*r;

  b1=floor(d/i),a[j]=a[j]+4*q*b1;

  b1=d-b1*i;

 }

 if (b[k]<=1e-5) { k++;printf(" k= %ld",k);}

 i = i + 2;

}while(k<=p);

printf("\n");

for(j=p;j>=1;j--){g=a[j]+n,n=floor(g/r),a[j]=g-r*n;}

for(j=1;j<p;j++) printf("%10.0f ",a[j]);

str3=strs1;

 }

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-20
10秒,算出100万位,哈哈!
1989年美国哥伦比亚大学研究人员用克雷-2型和IBM-VF型巨型电子计算机计算出π值小数点后4.8亿位数,后又继续算到小数点后10.1亿位数,创下最新的纪录。至今,最新纪录是——法国一工程师将圆周率算到小数点后27000亿位亿位。

参考资料:

第2个回答  2010-11-18
π=3.1415926535……
第3个回答  2010-11-17
我刚学完C语言,这么长的还看不大懂,不过我知道这个格式不对,main()主函数要单独一行,大括号也是.

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网