基本原理
与常见的二分法,牛顿迭代法的思路不一样。此方法直接求出2的平方根的二进制表示,基本思路是逐一判断1.0后跟的序列中的每一位应该是1还是0。理论上可以实现无限的精度,但是要求能够做大整数的算术运算与比较。在用php编程实现时,需要自已想办法实现大整数的算术运算与比较。由于python会在整数变大时自动转换为超大整数,因此不用担心整数的溢出问题。
解题程序
# coding=utf-8
def binSqrt2(n):
a=1
b=2
r=[]
r.append(1)
c=1
while c < n:
#print(a)
#print('-')
#print(b)
#print('--')
t = 2*a+1
t = t*t
if t < 4*b:
a=2*a+1
r.append(1)
else:
a=2*a
r.append(0)
b=4*b
c+=1
return r
r=binSqrt2(400)
print(r)