如何用C语言计算出pai<圆周率>后面1000位?跪求 大家帮帮忙

只要写出程序计算出1000位 当然能要输出几位就几位就更好 拜托大家了

1楼的太复杂了,不太明白。主要是最核心的这一句功能没看懂
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
这一句是用什么公式算圆周率的呢?

主循环是变量c从2800每次减14一直减到零,共循环200次,每次输出圆周率的4位,因此能输出圆周率800位。调节2800(以14的整倍数调整)可以控制圆周率最终的输出位数。

可是14是什么概念呢,我先试了一下将 c-=14; 改成 c-=13; 同时相应地对变量c的初始化按比例将 c=2800 改成 c=2600
发现输出结果的后几位算错了,然后我类似地再将 13 依次改为 12、11、10……
发现输出结果后面的位数算错的越来越多。
然后,我又将 14 分别改为 15、16、17……(同理变量c的初始化分别为 3000、3200、3400……)
这样的结果却没有算错(大于或等于14的结果都是一样的)。

于是我猜测 14 这个数可能是计算精度的最低限制,可为什么是14呢?谁来解释一下?
___________________

顺便研究了一下2楼的,方法简单易理解。只是用浮点算的话似乎算不到那么精确的位数。输出只显示了十来位后面的就全是零了
温馨提示:答案为网友推荐,仅供参考
第1个回答  2007-10-12
#include "stdio.h"
#include <conio.h>
long a=10000,b=0,c=2800,d,e=0,f[2801],g;
void main()
{
for(;b-c;)
f[b++]=a/5;
for(;d=0,g=c*2;)
{
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
c-=14;
if(e+d/a==3141)
{
printf("Pai=%.3f",(e+d/a)*1.0/1000);
e=d%a;continue;
}
if(e+d/a<10)
printf("000%d",e+d/a);
else if(e+d/a<100)
printf("00%d",e+d/a);
else if(e+d/a<1000)
printf("0%d",e+d/a);
else printf("%d",e+d/a);
e=d%a;
}
printf("\n");
getch();
}

这个将近1000吧
你可以参考一下
第2个回答  2007-10-12
#include<stdio.h>
long a = 10000,b,c=2800,d,e,f[2801],g,l,hj;
void main()
{for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);scanf("%l",&l);printf("%l",l);scanf("%d",&hj);
}

很短
不过算到的位数很多
试试吧
第3个回答  2007-10-12
首先你要知道它是这样的算法.
在高等数学的<<数学分析>>中的傅立叶级数那章就讲了其算法:
pai=4(1-1/3+1/5-1/7+.......)
这样你就可以编程了

#include "stdio.h"
#include<math.h>
viod main()

{int s;
long double pi, n ,t;
t=1;
pi=0;n=1.0;
s=1;
while(fabs(t)>1e-6)
{
pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf("pi=%1024.1000f\n",pi);
}
这个你看看行不
第4个回答  2007-10-12
pai=4(1-1/3+1/5-1/7+1/9.......)
只要知道了这个 就好办;本回答被提问者采纳

相关了解……

你可能感兴趣的内容

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