0

抱歉标题不好。我找不到更好的标题。(欢迎编辑:p)

假设有一个数字 X=8。我知道 2*2=4 所以它不包含数字 8。

编辑:想象一个 2x2 网格 ... 1,2,3,4 ...它不包含 8

现在,3*3 = 9,我们找到了获胜者(n=3)!

为此目的我的(糟糕的)代码

 long long int i=0; N = 8;
 while (i*i <N)
    {
        i++;
    }
    l = i; // l is to store he number "3"; say 8 is in a 3x3 grid

这不是计算 N = 100000000 时的有效方法。

获取包含 X 的 i*i 的更有效方法是什么?

4

1 回答 1

6

使用 中的sqrt函数<math.h>。这将是一个(相当)有效的算法,并且应该比你的循环运行得快得多。然后四舍五入,你就有了答案。

int find_containing_int(double x)
{
  const double sqr = sqrt(x);

  return ceil(sqr);
}
于 2013-02-04T14:32:49.160 回答