力扣69x的平方根
思路就是:
1.建立一个vector数组去保存数据,数据范围为1-n/2,在这个范围内,是可以计算出所有的n的平方根的值,除了两个情况,一个是n=0和n=1(这两种情况放在主函数判断)
2.在搜索的时候在数组内部会出现两种情况,一种是存在整数解,一种是不存在整数解。
存在整数解直接输出对应编号在打印出数组中对应编号的值即可。
不存在的话就判断小的数的平方比目标值小,大的数比目标数大,取较小的那个数即可。
#include<iostream> #include<vector> using namespace std; vector<int>a; int mySqrt(int n) { int left = 0; int right = a.size()-1; while(left<=right) { int middle = (left + right)/2; if(a[middle]*a[middle]>n) { if(a[middle-1]*a[middle-1]<n) { return middle-1; } right = middle - 1; } else if(a[middle]*a[middle]<n) { if(a[middle+1]*a[middle+1]>n) { return middle; } left = middle + 1; } else if(a[middle]*a[middle]==n) { return middle; } } return 0; } int main() { int x; cin >> x; if(x==1||x==0) { cout << x; return 0; } for(int i=1;i<=x/2;i++) { a.push_back(i); } // for(vector<int>::iterator it = a.begin();it!=a.end();it++) // { // cout << *it; // } // cout << endl; // cout << x << endl; int res = mySqrt(x); cout << a[res]; return 0; }