思想:
在0到1之间取两个随机数,如果这两个随机数(x,y)在四分之一圆内,就加一。
最后用落在圆禅扒内的点数,除以总点数,就是PI了。
#include
<stdio.h>
#include
<conio.h>
#include
<stdlib.h>
#include
<time.h>
#define
N
300000
main()
{
long
i,n=0
float
x,y,pi
srand(time(NULL))
for
(i=0i<Ni++)
{
x=1.0*rand()/RAND_MAX
y=1.0*rand()/RAND_MAX
if
(x*x+y*y<1)
n++
}
pi=4.0*n/N
printf("pi=%f\n",pi)
getch()
}
一个足以让渗伏你吐血的计算400位pi的C程序:int a=10000, b, c=2800, d, e, f[2801], g
main() {
for(b-cf[b++]=a/5)
for(d=0,g=c*2c -=14,printf("%.4d"纯渗,e+d/a),e=d%a)
for(b=cd+=f[b]*a,f[b]=d%--g,d/=g--,--bd*=b)
}
理论上只要用大数算法扩了就能一直算下去。我在Palm上面实现的那个就是基于这个算法,没有扩,算到4680位(受到Palm平台32k数组的长度限制)。
这个程序的特点是:你抱着想看看算pi原理的希望来读这个程序,结果发现就是看了也还是看不懂~~
转的,但是百度知道不允许贴地址哦
第二种:
用C语言编程π*π/6=1/1*1+1/2*2+1/3*3+。。。+1/n*n
#include<stdio.h>
#include<math.h>
main()
{
int n,i
double s=0
printf("输入n:")
scanf("%d",&n)
for(i=1i<=ni++)
{s=s+1.0/(i*i)
}
printf("pai=%f",sqrt(s*6))
}
第三种:
求pi=(1+1/做喊脊(1*3))*(1+1/(3*5))*(1+1/(5*7))…………直到最后一项的分数小于10的负6次方为止。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void main()
{
double pi,i,j,sigh,term
i=1,j=3,sigh=1,term=1
while(sigh>1e-6)
{
sigh=1/(i*j)
term=(1+sigh)*term
i=i+2
j=j+2
}
pi=term
printf("pi=%f\n",pi)
}
1、对于精度设计,一般与时间绝搏成槐键反比,算法和时间也是成正比的2、时间和CPU和内存又是成比例的。
以下非本人算法:
#include
<并明祥cstdio>
using
namespace
std
//某年Obfuscated
C
Contest佳作
long
a=10000,b,c=2800,d,e,f[2801],g
main(){for(b-c)f[b++]=a/5
for(d=0,g=c*2c-=14,printf(
"%.4d
",e+d/a),e=d%a)
for(b=cd+=f[b]*a,f[b]=d%--g,d/=g--,--bd*=b)}
===========================
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)