求s=4*(1-1/3+1/5-1/7+...+1/n当s前三位数字首次为3.14时的n值,想知道哪里有问题。
可能是最后要输出2n-1这个值,因为上面的代码中2n-1才是题目中所指的n,修改如下:
s1=0
n=1
while True:
if n%2!=0:
i=2*n-1
l=1/i
else:
i=-(2*n-1)
l=1/i
s1=s1+l
s=4*s1
s2=str(s)
#print("n=",n,"i=",i,'l=',l,'s1=',s1,'s=',s)
if s2[:4]=='3.14':
print("此时的n值为:",2*n-1) # 2*n-1即题目所求的n的值
print(s)
break
n=n+1
问题标题: Python计算s的值,需要求s前三位数字首次为3.14时的n值。
问题内容: 我在计算s=4*(1-1/3+1/5-1/7+...+1/n的过程中,遇到了问题。我想求出n的值,使得s的前三位数字首次为3.14。目前我已经尝试了多次,但结果不太对。请问我在计算过程中哪里出了问题,如何获得正确的n值?
解决方案:
s = 0
i = 1
while True:
s += 4*(1/i - 1/(i+2))
if str(s)[:4] == '3.14': # 当s前三位为3.14时,输出i值并退出循环
print("i为:",i)
break
i += 4
程序输出的结果为i值,此时需要求出对应的n值。根据s的计算公式可得: s = 4 * (1-1/3+1/5-1/7+...+1/n) 通过观察公式,得出n与i的转换关系如下: 当i=n-1时,s为正数 当i=n时,s为负数 当i=n+1时,s为正数 因此可以通过二分查找的方式来寻找i相应的n值。具体方法如下:
```python
def find_n(i: int): left = 1 right = 1000000 while left <= right: mid = (left + right) // 2 s = 4 * (1 - 1/3 + 1/5 - 1/7 + ... + 1/mid) # 判断i与n的转换关系 if mid - 1 == i: if s > 0: right = mid - 1 elif s < 0: left = mid + 1 else: return mid elif mid == i: if s > 0: right = mid - 1 else: left = mid + 1 elif mid + 1 == i: if s > 0: left = mid + 1 elif s < 0: right = mid - 1 else: return mid else: if s > 0: right = mid - 1 else: left = mid + 1 return None ```
通过以上二分查找的代码可以找到i值对应的n值。