geohash編碼 ——騰訊
阿新 • • 發佈:2018-12-10
題目描述
geohash編碼:geohash常用於將二維的經緯度轉換為字串,分為兩步:第一步是經緯度的二進位制編碼,第二步是base32轉碼。
此題考察緯度的二進位制編碼:演算法對緯度[-90, 90]通過二分法進行無限逼近(取決於所需精度,本題精度為6)。注意,本題進行二分法逼近過程中只採用向下取整來進行二分,針對二分中間值屬於右區間。演算法舉例如下: 針對緯度為80進行二進位制編碼過程:
1) 區間[-90, 90]進行二分為[-90, 0),[0, 90],成為左右區間,可以確定80為右區間,標記為1;
2) 針對上一步的右區間[0, 90]進行二分為[0, 45),[45, 90],可以確定80是右區間,標記為1;
3) 針對[45, 90]進行二分為[45, 67),[67,90],可以確定80為右區間,標記為1;
4) 針對[67,90]進行二分為[67, 78),[78,90],可以確定80為右區間,標記為1;
5) 針對[78, 90]進行二分為[78, 84),[84, 90],可以確定80為左區間,標記為0;
6) 針對[78, 84)進行二分為[78, 81), [81, 84),可以確定80為左區間,標記為0;
#include<iostream> using namespace std; int main() { int n; int left = -90; int right = 90; //char* res = new char[7]; //res[6] = 0; cin >> n; for(int i = 0; i <6; i++) { int mid = (left + right)/2; if(n < mid) { //res[i] = 0; cout << 0; right = mid; } else { cout << 1; //res[i] = 1; left = mid; } } cout << endl; return 0; //cout << res << endl; //delete[] res; //return 0; }
注意:
(1)開始用的輸出格式不對,報錯,不知道為什麼不能儲存在動態分配的記憶體裡,再輸出
(2)可以再加一步判斷輸入是不是在-90~90的有效範圍。