题干描述
没啥好说的qwq,求根号下x,并舍弃小数部分,只保留整数
题目解答
方法一:不多bb,直接0.5次方(这应该是最没有营养的解法,面试官估计不会买账23333)
x = int(input())
res = int(x **0.5)
print(res)
该方法内存消耗是最大的
方法二:同样是直接算,这里使用指对数袖珍计算器,由于
所以引入math模块
import math
x = int(input())
if x == 0:
res = 0
else:
res = int(math.exp(0.5*math.log(x)))
if (res + 1)**2 <= x :
res = res + 1
print(res)
这里有个坑人的地方,就是因为计算机无法精确储存指对运算得出的浮点数值,所以有可能在返回整数的时候造成误差,所以要判断加一后是否满足题设条件
该方法执行用时是最小的
方法三:二分法,大概是最经典的方法
x = int(input())
low, high, ans = 0, x, -1
while low <= high:
mid = (low + high) // 2
if mid * mid <= x:
ans = mid
low = mid + 1
else:
high = mid - 1
print(ans)
二分法有多种写法,但这个应该是最简单的,不会出现死循环
方法三:牛顿迭代法
这里直接开传送门了,不是我懒,是别人写的太好了…
二分查找 + 牛顿法(Python 代码、Java 代码).
x = int(input())
if x == 0:
res = 0
else :
C,x0 = float(x),float(x)
while True:
xi = 0.5 * (x0 + C / x0)
if abs(x0 - xi) < 1e-7:
break
x0 = xi
res = int(x0)
print(res)
该方法内存消耗是最小的
题目源自leetcode69.