题解 | #特殊的产奶量#
特殊的产奶量
https://www.nowcoder.com/practice/7780f80e7ece45928c7c138a20fede91
知识点
二分
思路
使用二分维护左右两个端点l,r,每次根据与x的关系来判断l和r的更新。由于题目只要两位小数,所以维护一个r-l>0.001就够了。
代码c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param x int整型
* @return string字符串
*/
string mySqrt(int x) {
// write code here
x = double(x);
double l = 0;
double r = x;
double ans = 0;
string t = "0.00";
//二分求t,t即为答案
while (r - l >= 0.001) {
double mid = (l + r) / 2;
cout << ":" << mid << endl;
cout << ":::" << abs(mid * mid - x) << endl;
if (abs(mid * mid - x) <= 0.001) {//当前答案合法,更新并太退出循环
// cout<<1<<endl;
t = to_string(mid);
break;
}
if (mid * mid - x < 0.001)l = mid;
else if (mid * mid - x > 0.001 )r = mid;
t = to_string(mid);
}
//截取小数点以及其后两位(题目不知道说的什么)
string anss;
// cout << ans << endl
for (int i = 0; i < t.size(); i++) {
if (t[i] == '.') {
anss += t[i];
anss += t[i + 1];
anss += t[i + 2];
break;
} else anss += t[i];
}
cout << anss << endl;
return anss;
}
};