问题1
import numpy as np
n = 100000 #定义n的个数
M = 1 #分子
N = 1000 #定义精确小数后面的位数
class bbb():
def __init__(self,M,D,N): #M为分子,D为分母,N为小数精度
self.M = M
self.D = D
self.N = N
self.div = div = np.zeros(self.N,dtype=int)
if D:
self.division()
def __add__(self,other):
self.division_add(other.div)
return self #必须返回自身,不然一相加就Nonetype了
def division(self): #M分子,D分母,N小数位数
r = self.M
for i in range(self.N):
n = 10*r/self.D
r = 10*r%self.D
self.div[i]=n
def division_add(self,div_another):
self.div=self.div+div_another
for i in reversed(range(1,len(self.div))):
self.div[i-1] += self.div[i]/10
self.div[i] = self.div[i]%10
def result_str(self):
#map对列表里的每个元素执行相应函数
return str(self.div[0]/10) + "".join(map(str,self.div[1:]))
def result_float(self):
return float(self.result_str())
bassaier= bbb(M,0,N)
for i in range(1,n+1):
bassaier += Multiple_decimals(M,i*i,N)
print("近似值:%s" %(bassaier.result_str()))
print("精确值:%s" %(str(np.pi*np.pi/6)))
问题2
3
拆分n