我在使用 python 在圆周率的小数位中寻找手机尾号四位时,发现得到一百位小数部分以后的程序出现了问题
sj=list(input("请输入手机号后四位:"))
B=100
y=0
x=0
while x==0:
n = int(B) #输入字符转换为整数
t = n+10 #多计算10位,防止尾数取舍的影响
b = 10**t #为算到小数点后t位,两边乘以10^t
x1 = b*4//5 #取整求含4/5的首项
x2 = b // -239 #取整求含1/239的首项
s = x1+x2 #求第一大项
n *= 2 #设置下面循环的终点,即共计算n项
for i in range(3, n, 2): #循环初值=3,末值n,步长=2
x1 //= -25 #取整求每个含1/5的项及符号
x2 //= -57121 #取整求每个含1/239的项及符号
x = (x1+x2) // i #求两项之和,除以对应因子,取整
s += x #求总和
pai = s*4 #求出π
pai //= 10**10 #舍掉后十位
pai_decimal=int(pai%(10**100))#π的最远100位小数部分
print(pai_decimal)
pi_leave=[]
t=0
while t==0:
for v in range(0,len(pi_leave)):
pi=[list(str(pai_decimal))].insert(v,pi_leave[v])
pi1=pi[:-3]
u=0
while u==0:
for i,m in enumerate(pi1):
if m==sj[0]:
if pi[i+1]==sj[1]:
if pi[i+2]==sj[2]:
if pi[i+3]==sj[3]:
y=1
u=1
t=1
print(i+1)
else:
pi_leave=pi[-3:]
if y==1:
x=1
print(i+1)
else:
x=0
B=B+100
即使是输入1415,即小数位第一组四位数字,程序也会运行十几分钟仍无结果,还不报错。如图所示。
你看下,如有帮助,给个采纳,下个问题不迷路呦 :
sj = list(input("请输入手机号后四位:"))
# 计算圆周率的前100位小数部分
B = 110
n = int(B)
t = n + 10
b = 10 ** t
x1 = b * 4 // 5
x2 = b // -239
s = x1 + x2
n *= 2
for i in range(3, n, 2):
x1 //= -25
x2 //= -57121
x = (x1 + x2) // i
s += x
pai = s * 4
pai //= 10 ** 10
pai_decimal = pai % (10 ** 100)
pi_str = str(pai_decimal)
n_digits = len(pi_str)
# 在圆周率小数部分中寻找手机号后四位
idx = pi_str.find(''.join(sj))
while idx == -1:
# 若未找到,则继续计算下100位圆周率的小数部分
B += 100
n = int(B)
t = n + 10
b = 10 ** t
x1 = b * 4 // 5
x2 = b // -239
s = x1 + x2
n *= 2
for i in range(3, n, 2):
x1 //= -25
x2 //= -57121
x = (x1 + x2) // i
s += x
pai = s * 4
pai //= 10 ** 10
pai_decimal = pai % (10 ** 100)
pi_str += str(pai_decimal)
# 再次在新的100位小数部分中寻找手机号后四位
idx = pi_str.find(''.join(sj), -100)
print("在圆周率小数部分中找到了手机号,位置为第{}位。".format(idx+1))
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!def output(s,l):
if l==0:
return
print (s[l-1])
output(s,l-1)
def tm027():
【思路】:直接从官网复制,不喜欢递归。
s = input('Input a string:')
l = len(s)
output(s,l)
python太慢了。你可以这样,去下载一个 super pi 软件,用它可以算圆周率,而且比较快(quick pi、fast pi等也可以)
然后用你的python读取其生成的结果文件(后缀是一个dat,其实是文本文件)
然后查找你的电话后四位