jmouse 2008-6-3 13:59
2008-06-03 Ruby 测试题(00018)
今天来求平方根。
输入N,M为自然数,求N的平方根,精确到M位小数。
AllenDang 2008-6-24 14:32
我回来了!不知道用了BigDecimal库算不算作弊。[code]require "bigdecimal"
def sqrt (n,m)
a = BigDecimal(n.to_s)
b = a/2
while ((b*b-a).abs>0.001)
b=(b+a/b)/2
end
b.round(m).to_s("F")
end
puts sqrt(2,5)[/code]
[[i] 本帖最后由 AllenDang 于 2008-6-24 14:34 编辑 [/i]]
5swords 2008-6-24 17:21
不过, 好象精确不到M位. 虽然有M位小数, 但是这M位不对.
[[i] 本帖最后由 5swords 于 2008-6-26 15:40 编辑 [/i]]
liumuqing 2008-6-29 19:25
很久没来了[code]def sqrt(n, m)
nn = n**2
a, b = 1.0, n
a, b = b, a if a > b
aa, bb = a**2, b**2
key = 1.0/ (10**m)
while b - a > key
mid = (b + a) / 2
midmid = mid**2
if midmid < n
aa = midmid
a = mid
elsif midmid > n
bb = midmid
b = mid
else
a = mid
b = mid
end
end
return a
end
# TEST
puts sqrt(0.5, 10)
puts 0.5 **0.5
puts
puts sqrt(2, 10)
puts 2 **0.5[/code]