牛客 经纬度

题目链接:点击打开链接
给定地球的两个经纬度坐标,问这两个点的球面距离和直线距离的差。假设地球为球体,半径为6371009米。

第一行一个整数T表示数据组数。
接下来n行,每行四个数lat1, lng1, lat2, lng2分别表示两个点的经纬度。
正数表示北纬和东经。负数表示南纬和西经。数据保证合法。
输入
1
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
",2*asin(d/(2*R))*R-d); 
    }
    return 0;
}

原文地址:https://www.cnblogs.com/ACMerszl/p/9572980.html