我正在尝试使用R中的逐位数字算法来实现输入的平方根。我已经在网上找到了一些关于如何做的伪代码,但似乎我已经被置于无限循环中
sqrt.by.digit <- function(S, eps=1e-6) {
res <- 0
d <- 1
while ((S - res * res) > eps) {
x <- 1
while ((res + (x * d)) * (res + (x * d)) <= S) {
x <- x + 1
res <- res + (x - 1) * d
d <- d /10
}
}
res
}
print(sqrt.by.digit(10, 0.1))
答案 0 :(得分:0)
代码几乎可以,但问题隐藏在细节中。该算法指出:
描述的内部循环仅提到在条件满足时应执行的一个操作,即Set x to x + 1
。
因此,问题实现所需的唯一变化是移动括号}
,以便内部 - while
执行一个操作。
sqrt.by.digit <- function(S, eps=1e-6) {
res <- 0
d <- 1
while ((S - res * res) > eps) {
x <- 1
while ((res + (x * d)) * (res + (x * d)) <= S) {
x <- x + 1
}
res <- res + (x - 1) * d
d <- d /10
}
res
}
sapply((0:10)^2, sqrt.by.digit)
# [1] 0 1 2 3 4 5 6 7 8 9 10