计算平方根的怪异方法

霍华德·格雷

有人告诉我此代码段等效于 (int)sqrt(n)

int s(int n) {
    for (int i = 1, k = 0; n > 0; i += 2) {
        if (k + i > n)
            return i / 2;
        k += i;
    }
    return 0;
}

它似乎有效,但是我不明白它是如何工作的?

交际

它利用了事实x^2 = 1 + 3 + 5 + ... + (2*x-1)这里i是奇数,k是它们的总和。当总和大于时,它将停止n在这一点上i == (2*x-1) + 2x平方根在哪里x == floor(i/2)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TOP 榜单

热门标签

归档