牛客 经纬度
题目链接:点击打开链接
给定地球的两个经纬度坐标,问这两个点的球面距离和直线距离的差。假设地球为球体,半径为6371009米。
第一行一个整数T表示数据组数。
接下来n行,每行四个数lat1, lng1, lat2, lng2分别表示两个点的经纬度。
正数表示北纬和东经。负数表示南纬和西经。数据保证合法。
输入
1
43.466667 -80.516667 30.058056 31.228889
43.466667 -80.516667 30.058056 31.228889
输出
802333
AC代码:
#include <bits/stdc++.h>
using namespace std;
const double pi=3.14159265358979;
const int R=6371009;
int main(){
int t;
double jin1,jin2,wei1,wei2,dis1,dis2,a,b;
scanf("%d",&t);
while(t--){
scanf("%lf%lf%lf%lf",&jin1,&wei1,&jin2,&wei2);
jin1 = jin1*pi/180.0;
jin2 = jin2*pi/180.0;
wei1 = wei1*pi/180.0;
wei2 = wei2*pi/180.0;
double d = R*sqrt(2-2*(cos(jin1)*cos(jin2)*cos(wei1-wei2)+sin(jin1)*sin(jin2)));
printf("%.0lf\n",2*asin(d/(2*R))*R-d);
}
return 0;
}
埋骨何须桑梓地,人生无处不青山