k=sqrt(n),由于其原型是double sqrt(double),他的返回值和参数都是double型,浮点数据只是对一定范围内的实数的一种近似表示,并不精确。
与我们要求得似是而非,存在错误。
通过数学方法,可以正确求出平方根或者其整数部分。
1=1*1;
1+3=2*2;
1+3+5=3*3;
~~~
1+3+5+~+(2k-1)=k*k;
odd=1,k=1; while(n>=odd) { n-=odd; odd+=2; k++; } // k即为所求