找数字第一反应二分,第二反应hash
#include <iostream>
#include <math.h>
using namespace std;
int findSqrt(int t)
{
if (t <= 0)
{
return -1;
}
if (t == 1)
{
return 1;
}
int index = -1;
int lo = 2;
int hi = t - 1;
while(lo <= hi)
{
int mid = (lo + hi) / 2;
int res = mid * mid;
if (res == t)
{
return mid;
}
else if (res < t)
{
index = mid;
lo = mid + 1;
}
else
{
hi = mid - 1;
}
}
return index;
}
int main()
{
int i = 9;
int ret = findSqrt(i);
cout << "i = " << i << ", ret = " << ret << ", res = 3" << endl;
i = 347;
int res = (int)sqrt(i);
ret = findSqrt(i);
cout << "i = " << i << ", ret = " << ret << ", res = " << res << endl;
i =9987;
res = (int)sqrt(i);
ret = findSqrt(i);
cout << "i = " << i << ", ret = " << ret << ", res = " << res << endl;
return 0;
}