主题:一个很牛的计算pi的c程序
yaozheng
[专家分:28410] 发布于 2003-08-18 22:46:00
#include <stdlib.h>
#include <stdio.h>
long a=10000,b,c=2800,d,e,f[2801],g;
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);
}
计算结果:
31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185
回复列表 (共115个回复)
71 楼
chc05 [专家分:540] 发布于 2005-05-04 22:01:00
利害!!! 能不能给个解释??
72 楼
fengfeng0222 [专家分:1790] 发布于 2005-05-05 01:11:00
真的看不明白,楼主可不可以说出它的原理啊?还有程序还不够完美,可不可以计算出3.14……啊
73 楼
zzd183816 [专家分:80] 发布于 2005-05-06 14:18:00
高手就是高手
看郁闷了
除了会认识字母外,其他的保密
74 楼
键盘上的爱 [专家分:0] 发布于 2005-05-25 16:56:00
晕,数字又没规律,用来做什么的
75 楼
meteor135 [专家分:6060] 发布于 2005-05-25 17:34:00
//
// 2005年5月25日
// 17:26:35
//
#include <stdlib.h>
#include <stdio.h>
long f[2801];
main()
{
long a=10000;
long b = 0;
long c=2800;
long d = 0;
long e = 0;
long g = 0;
//for(;b-c;)
//f[b++]=a/5;
// 等价代码:
for(b = 0;b<2800;b++)
f[b]=2000;
for( ;g=c*2; )
{
d=0;
b=c;
for( ; d+=f[b]*a, f[b]=d%--g, d/=g--, --b; )
{
d*=b;
}
c-=14;
printf("%.4d",e+d/a);
e=d%a;
}
return 0;
}
76 楼
meteor135 [专家分:6060] 发布于 2005-05-25 17:37:00
//
// 2005年5月25日
// 17:26:35
// 17:29:33
//
#include <stdlib.h>
#include <stdio.h>
long f[2801];
main()
{
long b = 0;
long c=2800;
long d = 0;
long e = 0;
long g = 0;
for(b = 0;b<2800;b++)
f[b]=2000;
for( ;g=c*2; )
{
d=0;
b=c;
for( ; d+=f[b]*10000, f[b]=d%--g, d/=g--, --b; )
{
d*=b;
}
c-=14;
printf("%.4d",e+d/10000);
e=d%10000;
}
return 0;
}
77 楼
meteor135 [专家分:6060] 发布于 2005-05-25 17:44:00
//
// 2005年5月25日
// 17:26:35
// 17:29:33
//
#include <stdlib.h>
#include <stdio.h>
long f[2801];
main()
{
long b = 0;
long c=2800;
long d = 0;
long e = 0;
long g = 0;
for(b = 0;b<2800;b++)
f[b]=2000;
for( ;g=c*2; )
{
d=0;
b=c;
c-=14;
for( ; d+=f[b]*10000, f[b]=d%--g, d/=g--, --b; )
{
d*=b;
}
// 取超过10000的数位
printf("%.4d",e+d/10000);
// 记录低于10000的数位
e=d%10000;
}
return 0;
}
78 楼
meteor135 [专家分:6060] 发布于 2005-05-25 18:00:00
//
// 2005年5月25日
// 17:26:35
// 17:29:33
// 17:51:52
//
#include <stdlib.h>
#include <stdio.h>
long f[2801];
main()
{
long b = 0;
long c = 2800;
long d = 0;
long e = 0;
long g = 0;
for(b = 0;b<2800;b++)
f[b]=2000;
while(c)
{
d = 0;
b = c;
g = 2*c;
c-= 14;
for( ; g--, d+=f[b]*10000, f[b]=d%g, d/=g, g--, --b; )
{
d*=b;
}
// 取超过10000的数位
printf("%.4d",e+d/10000);
// 记录低于10000的数位
e=d%10000;
}
return 0;
}
79 楼
meteor135 [专家分:6060] 发布于 2005-05-25 18:07:00
//
// 2005年5月25日
// 17:26:35
// 17:29:33
// 17:51:52
// 17:59:52
//
#include <stdlib.h>
#include <stdio.h>
// long f[2801];
long f[2800];
main()
{
long b = 0;
long c = 0;
long d = 0;
long e = 0;
long g = 0;
for(b = 0;b<2800;b++)
f[b]=2000;
for(c=2800; c; c-=14)
{
d = 0;
b = c;
g = 2*c-1;
for(; d+=f[b]*10000, f[b]=d%g, d/=g, --b; )
{
d *= b;
g -= 2;
}
// 取超过10000的数位
printf("%.4d",e+d/10000);
// 记录低于10000的数位
e=d%10000;
}
return 0;
}
80 楼
shareaza [专家分:0] 发布于 2005-05-25 20:33:00
我看这个程序,是在凑数,反正PI后面的那么多位没几个人知道那是对的还是假的
我来回复