用户:
SunshineCode查看:1 回复:2 评论:1 创建时间:2019-12-08T13:26:33
首先,这个代码请在网页版海龟编辑器上运行。
话不多说,先给代码!
while(1):
import time
time1=time.time()
number = int(input('请输入想要计算到小数点后的位数n:'))
number1 = number+10
b = 10**number1
x1 = b*4//5
x2 = b// -239
he = x1+x2
number *= 2
for i in xrange(3,number,2):
x1 //= -25
x2 //= -57121
x = (x1+x2) // i
he += x
pai = he*4
pai //= 10**10
paistring=str(pai)
result=paistring[0]+str('.')+paistring[1:len(paistring)]
print(result)
time2=time.time()
print(u'总共耗时:' + str(time2 - time1) + 's')
print('——————————————————————————————————————')
等等等等……不是9行代码吗?怎么给我22行代码?
别急!我们来提取一下这22行代码中的精华,尽量压缩代码行数!
依我自己的能力,我把这22行代码压缩到了9行:
number = int(input('请输入想要计算到小数点后的位数n:'))
x1 = 10**(number+10)*4//5
x2 = 10**(number+10)// -239
he = x1+x2
for i in xrange(3,number*2,2):
x1 //= -25
x2 //= -57121
he += (x1+x2) // i
print(str(he*4//(10**10))[0]+str('.')+str(he*4//(10**10))[1:len(str(he*4//(10**10)))])
这样,我们就只用了9行python代码,计算无限位数的圆周率。
不过,第一个代码虽然比较长,但是使用方便,并且可以计时。第二个代码就是第一个代码的本质,最大的优点就是简短,但相比于第一个代码还非常不足。
这是使用马青公式计算圆周率。喵电脑实测:
1000位 0.3s
3000位 0.9s
5000位 1.7s
8000位 3.1s
10000位:5.8s
20000位:22.2s
总的来说这个速度还是比较快的,尽管越到后面越吃力。不过相比于y-cruncher,速度还是没法比的。如果要真正计算圆周率,还是推荐使用诸如山谷居士或者ycruncher这样的软件,1个多小时跑出10亿位(亲测可行)。
SunshineCode@比比芭比波哩波发现代码有一个问题,纠正一下代码:
number = int(input('请输入想要计算到小数点后的位数n:'))
x1 = 10**(number+10)*4//5
x2 = 10**(number+10)// -239
he = x1+x2
for i in range(3,number*2,2):
x1 //= -25
x2 //= -57121
he += (x1+x2) // i
print(str(he*4//(10**10))[0]+str('.')+str(he*4//(10**10))[1:len(str(he*4//(10**10)))])点赞1
评论